如何从特定架构的SQL Server 2014(Unicode)将数据导入Hive仓库

时间:2015-07-08 11:11:57

标签: sql-server hadoop hive cloudera sqoop

我想从SQL Server导入数据并从配置单元中查询。

我使用cloudera模板创建了一个VirtualBox,并开始阅读其教程。

我成功地能够使用sqoop作为avro文件从SQL Server导入数据,然后在hive中创建表并从avro文件导入数据。然后从配置单元中查询它。

但sqoop的import-all-tables命令只导入架构表" dbo"。 如果我还要导入具有模式dw的表,该怎么办?我尝试使用import命令导入dw模式中存在的特定表。但那也行不通。

任何想法如何使用sqoop将非dbo.架构相关表格作为avro从SQL Sever导入数据?或者从SQL Server导入除dbo.模式之外的数据并将其直接加载到配置单元中?

1 个答案:

答案 0 :(得分:1)

下载JDBC驱动程序并将其复制到sqoop目录

sqoop import --driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" --connect="jdbc:sqlserver://sqlserver;database=databasename;username=username;password=passwordofuserprovidedinusername" --username=username --password= passwordofuserprovidedinusername --table="schemaname.tablename" --split-by=primarykeyoftable --compression-codec=snappy --as-avrodatafile --warehouse-dir=/user/hive/warehouse/tablename

使用sqoop

从Sql Server导入表
hadoop fs -ls /user/hive/warehouse
ls -l *.avsc

验证表格是否正确导入

sudo -u hdfs hadoop fs -mkdir /user/examples
sudo -u hdfs hadoop fs -chmod +rw /user/examples
hadoop fs -copyFromLocal ~/*.avsc /user/examples

创建新目录并提供适当的权限

hive

启动配置单元

CREATE EXTERNAL TABLE tablename
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION 'hdfs:///user/hive/warehouse/tablename’
TBLPROPERTIES ('avro.schema.url'='hdfs://quickstart.cloudera/user/examples/sqoop_import_schemaname_tablename.avsc');

将表格架构和数据从sqoop导入到hive仓库

GET /image.gif HTTP/1.1
User-Agent: WebBrowser
Accept-Encoding: deflate,gzip
Connection: keep-alive
... and more headers if present ...

注意: 确保在输入命令时,如果您正在处理命令,则单引号可能会更改。路径或文件名中不应有任何空格。