你经常会需要把HDFS中的数据导入外部结构化数据库中,或者把外部结构化数据库数据导入HDFS中, sqoop就是这样一个工具,用来在hadoop hdfs和结构化数据库之间传输数据。你可以使用sqoop把外部的结构化数据库的数据导入到HDFS中或者相关系统中(Hive HBase),相反的你也可以使用sqoop把HDFS中的数据导入到结构化数据库中。
1 安装Sqoop
sqoop — Complete Sqoop distribution
sqoop-metastore — For installation of the Sqoop metastore only
apt-get install sqoop
2 安装相关数据库的JDBC驱动
Sqoop不自带第三方JDBC驱动,所以你必须自己下载驱动,然后保存在/usr/lib/sqoop/lib/目录
1 安装MySQL JDBC驱动
cp mysql-connector-java-version/mysql-connector-java-version-bin.jar /usr/lib/sqoop/lib/
2 安装PostgreSQL JDBC驱动
cp postgresql-9.2-1002.jdbc4.jar /usr/lib/sqoop/lib/3 为YARN设置HADOOP_MAPRED_HOME
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
在CDH4中还提供了一个Sqoop 2,Sqoop 2是一个服务端和客户端模式在HDFS和关系数据库之间传输数据的。
1 安装Sqoop 2
Sqoop 2服务被分成了两个包:客户端sqoop2-client和服务端sqoop2-server。在集群中的某一台机器安装服务端, 在需要作为客户端的机器上安装客户端,注意:Sqoop 2不能和Sqoop 1安装在同一台机器上
1 安装Sqoop 2服务端
apt-get install sqoop2-server
2 安装Sqoop 2客户端
apt-get install sqoop2-client
2 配置Sqoop 2
Sqoop 2服务都可以同MRv1或者YARN一起工作。但是不能同时和两个一起工作。
1 MRv1
修改/etc/defaults/sqoop2-server
CATALINA_BASE=/usr/lib/sqoop2/sqoop-server-0.20
2 YARN
修改/etc/defaults/sqoop2-server
CATALINA_BASE=/usr/lib/sqoop2/sqoop-server
3 安装JDBC驱动
cp mysql-connector-java-version/mysql-connector-java-version-bin.jar /var/lib/sqoop2/3 启动、停止、访问Sqoop 2服务
service sqoop2-server start service sqoop2-server stop check: wget -qO - localhost:12000/sqoop/version4 使用Sqoop 2 CLI客户端访问Sqoop 2服务
sqoop2 sqoop:000> set server --host localhost
在hadoop集群的组件中还有一个压缩/解压利器库,那就是Snappy,Snappy的前身是Zippy,虽然只是一个数据压缩库,却被Google用于许多内部项目,如BigTable、MapReduce等。Google表示该算法库针对性能做了调整,针对64位x86处理器进行了优化。
1 安装Snappy
Snappy is provided in the hadoop package along with the other native libraries (such as native gzip compression)
2 在MapReduce中使用Snappy,修改/etc/hadoop/conf/mapred-site.xml
1 MRv1
<property> <name>mapred.compress.map.output</name> <value>true</value> </property> <property> <name>mapred.map.output.compression.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property>
2 YARN
<property> <name>mapreduce.map.output.compress</name> <value>true</value> </property> <property> <name>mapred.map.output.compress.codec</name> <value>org.apache.hadoop.io.compress.SnappyCodec</value> </property>3 使用 Snappy压缩 Sqoop的导入数据
--compression-codec org.apache.hadoop.io.compress.SnappyCodec
4 使用Snappy压缩Hive数据
SET hive.exec.compress.output=true; SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec; SET mapred.output.compression.type=BLOCK;
当然使用Snappy还可以压缩其他数据,请参考官方文档