Sqoop导入导出数据

Sqoop

安装部署

sqoop –> 1.4.7 点击下载

hadoop –>2.7.5

默认系统已经安装了mysql或者mariadb

将下载好的sqoop的二进制包解压到/usr/local下然后进行配置

sqoop相关配置

  • 配置环境变量
# vim /etc/profile
export SQOOP_HOME=/usr/local
export PATH=$SQOOP_HOME/bin:$PATH
:wq
# source /etc/profile
  • 配置sqoop相关参数
# cp conf/sqoop-env-template.sh conf/sqoop-env.sh
# vim conf/sqoop-env.sh
# Hadoop  
export HADOOP_PREFIX=/usr/local/hadoop
export HADOOP_HOME=${HADOOP_PREFIX}  
export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}  
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}  
export HADOOP_MAPRED_HOME=${HADOOP_PREFIX}
export HADOOP_YARN_HOME=${HADOOP_PREFIX}  
# Native Path  
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native  
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib/native" 
# Hadoop end

#Hive
export HIVE_HOME=/usr/local/hive
export PATH=$HIVE_HOME/bin:$PATH

#HBase
export HBASE_HOME=/usr/local/hbase
export PATH=$HBASE/bin:$PATH
  • 下载mysql驱动

在conf/lib目录下

# wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar

测试Sqoop

从mariadb导入到HDFS
# sqoop import \
--connect jdbc:mysql://localhost/test \
--username root \
--password 111111  \
--table table1 \
-m 1 \
--target-dir /test
# hadoop fs -ls /test
# hadoop fs -cat /test/part*

命令解析:

  • sqoop # sqoop命令
  • import # 表示导入
  • –connect jdbc:mysql://ip:port/test # 告诉jdbc,连接mysql的url
  • –username root # 连接mysql/mariadb的用户名
  • –password 111111 # 连接mysql/mariadb的密码
  • –table table1 # 从数据库中导出的表的名字
  • –query # 查询语句
  • –columns # 指定列
  • –where # 条件
  • –hive-import # 指定为hive导入
  • –hive-table # 指定hive表,可以使用–target-dir /test替换
  • –fields-terminated-by ‘\t’ # 指定输出文件中的行的字段分隔符
  • -m 1 # 复制整个过程使用一个map作业
从HDFS导出到mariadb
# sqoop export \
--connect jdbc:mysql://localhost:3306/test \
--driver com.mysql.jdbc.Driver \
--username root \
--password 111111 \
--table table1 \
--export-dir /test
从mariadb导入HBase
# hbase shell
# create 'test', 'column'
# sqoop import \
--connect jdbc:mysql://localhost:3306/test \
--username root \
--password 111111 \
--table table1 \
--hbase-table test \
--hbase-row-key id \
--column-family data \
--hbase-create-table \
--m 1

其中–hbase-row-key 的id是RDBMS中的一个列,作为行键,RDBMS的表中有逐渐,那么主键就为HBase的行键。

从HBase导出到mariadb
从mariadb导入Hive

在从RDBMS导入HIVE中的时候,出现如下错误:

Sqoop导入Hive

只要sqoop找到hive-exec.jar即可,所以我们在配置了HIVE_CONF_DIR之后还要执行以下命令:

# ln -s $HIVE_HOME/lib/hive-exec.jar $SQOOP_HOME/lib/hive-exec.jar

以上在Hive的lib中如果jar包带有版本号,可根据情况进行链接创建。

# sqoop import --hive-import \
--connect jdbc:mysql://localhost/test 
--username root \
--password 111111 \
--table table1 \
--m 1 \
--delete-target-dir \
--verbose
从Hive到导出到mariadb
### 数据集成:MySQL与Hadoop通过Sqoop导入导出数据的实践指南 Sqoop 是一种用于在 Hadoop 和关系型数据库之间高效传输数据的工具,支持从 MySQL数据库导入数据到 Hadoop 生态系统中,也可以将处理后的数据导出回数据库。以下是一个基本的操作指南: #### 1. 安装 Sqoop 确保已经安装了 Java、Hadoop,并配置好了环境变量。然后下载并安装 Sqoop: ```bash wget https://downloads.apache.org/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C /usr/local mv /usr/local/sqoop-1.4.7.bin__hadoop-2.6.0 /usr/local/sqoop ``` 设置 `SQOOP_HOME` 并将其添加到 `PATH`。 #### 2. 导入 MySQL 表到 HDFS/Hive 使用以下命令将 MySQL 中的数据表导入到 HDFS: ```bash sqoop import \ --connect jdbc:mysql://localhost:3306/db_name \ --username root \ --password password \ --table table_name \ --target-dir /user/hadoop/output_dir \ --fields-terminated-by ',' \ --lines-terminated-by '\n' \ --num-mappers 1 ``` 如果需要导入到 Hive,可以加上 `--hive-import` 参数。 #### 3. 导出 HDFS/Hive 数据到 MySQLHDFS 上的数据导出回 MySQL: ```bash sqoop export \ --connect jdbc:mysql://localhost:3306/db_name \ --username root \ --password password \ --table table_name \ --export-dir /user/hadoop/output_dir \ --input-fields-terminated-by ',' ``` Sqoop 的底层是基于 MapReduce 实现的,因此具备良好的并行性和容错能力[^1]。 --- ### Spark RDD 和 SparkSQL 基础任务编写教程 #### 1. RDD 编程基础 Spark 提供了弹性分布式数据集(RDD)作为其核心数据结构,适合进行低层次的函数式操作。 ##### 创建 RDD ```python from pyspark import SparkContext sc = SparkContext("local", "RDD Example") data = [1, 2, 3, 4, 5] distData = sc.parallelize(data) ``` ##### 转换与动作操作 ```python rdd = sc.parallelize([1, 2, 3, 4]) squared = rdd.map(lambda x: x * x).collect() print(squared) # 输出 [1, 4, 9, 16] ``` #### 2. SparkSQL 编程基础 SparkSQL 提供了更高层次的抽象,支持结构化查询语言和 DataFrame API。 ##### 使用 DataFrame 进行 SQL 查询 ```python from pyspark.sql import SparkSession spark = SparkSession.builder.appName("SparkSQL Example").getOrCreate() df = spark.read.csv("path/to/file.csv", header=True, inferSchema=True) df.createOrReplaceTempView("people") result = spark.sql("SELECT name FROM people WHERE age > 30") result.show() ``` Spark 支持多种数据源,并提供了内存计算模型以提升性能[^2]。 --- ### HDFS 高可用方案设计与实现(如 NameNode HA) HDFS 的高可用性主要通过 NameNode 的主备切换机制来实现,避免单点故障。 #### 1. 架构设计 HDFS HA 架构包含两个 NameNode(一个 Active,一个 Standby),多个 JournalNode 用于共享编辑日志(EditLog),ZooKeeper 协调主备切换。 #### 2. 配置步骤 - **配置 ZooKeeper**:确保 ZooKeeper 集群正常运行。 - **配置 hdfs-site.xml** ```xml <configuration> <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.ha.nameservices</name> <value>mycluster</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>host1:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>host2:8020</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>host1:50070</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>host2:50070</value> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/path/to/journal/data</value> </property> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> </configuration> ``` - **启动 HA 模式** 执行以下命令初始化 HA 状态并启动服务: ```bash hdfs zkfc -formatZK hdfs namenode -initializeSharedEdits ``` HDFS 采用主备架构,并通过 ZooKeeper 实现自动故障转移,从而提供高可用性[^3]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值