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两个命令实现这一目的,从而降低了大数据开发的成本,节省了时间。