MSSQL数据高效存储在HDFS上(mssql放在hdfs上)

## MSSQL数据高效存储在HDFS上

在大数据领域中,MSSQL数据存储经常会被挑选为主流的数据库存储系统。ERP系统中的关键数据、重要指标数据都会汇总存储在MSSQL数据库中,而HDFS是一种使用比较广泛的分布式文件系统,可以在多台机器上提供完整的持续数据存储。如何将MSSQL数据高效存储在HDFS上,就变成了一个重要问题。

### 一、存储原理

MSSQL数据包括数据表和视图两种,其中数据表里面存储的是原始数据,而视图据当中存储的是对原始数据的汇总与统计结果。将MSSQL数据存储在HDFS上首先要建立MSSQL数据库与HDFS之间的连接,才能将MSSQL数据复制至HDFS文件系统,这里可以使用ODBC Driver来实现这种连接 。

### 二、实现操作过程

在将MSSQL数据存储在HDFS上实现之前,可先使用Python脚本读取MSSQL表结构,并对表结构做一次分析,确定表的分区类型,根据分区类型在HDFS上创建相应的文件夹 。

下面参考以下Python脚本分析MSSQL表结构:

“`python

import pyodbc

conn = pyodbc.connect(“DRIVER={SQL Server};SERVER=localhost;DATABASE=MyDb;UID=sa;PWD=123456”)

cur = conn.cursor()

# 获取表名和表中的列字段类型

cur.execute(“SELECT * FROM INFORMATION_SCHEMA.COLUMNS Where table_name=’MyTable'”)

column_list = cur.fetchall() # 表中的列字段列表

# 遍历表的列字段,获取字段类型

partition_type = ‘String’

for row in column_list:

if row.data_type == ‘int’: # 整型

partition_type = ‘Int’

break

# 创建HDFS文件夹

# 文件夹根据分区类型来表示

if partition_type == ‘Int’:

cmd = ‘hadoop fs -mkdir /user/MyDb/MyTable \

-p “partitionedBy(field1 [int],field2 [int])”‘

else:

cmd = ‘hadoop fs -mkdir /user/MyDb/MyTable \

-p “partitionedBy(field1 [String],field2 [String])”‘

os.system(cmd)

接下来,就可以使用sqoop,将MSSQL数据存储到HDFS上。可以使用sqoop命令指定数据复制的过程,并在复制过程中指定存储在HDFS上的目录结构 。
比如:使用以下sqoop命令将MSSQL的MyDB数据库中的MyTable表的数据复制到HDFS的指定文件夹中
```bash
$ sqoop import --connect jdbc:sqlserver://localhost:1433 \
--username sa --password 123456 \
--table MyTable \
--split-by field1
--target-dir /user/MyDb/MyTable

### 三、总结

完成上面的操作后,MSSQL数据就可以高效存储在HDFS上,并且可以根据分区类型,进行快速查询。本文介绍了MSSQL数据如何高效存储在HDFS上,并且提供了Python和sqoop两个命令实现这一目的,从而降低了大数据开发的成本,节省了时间。


数据运维技术 » MSSQL数据高效存储在HDFS上(mssql放在hdfs上)