zoukankan      html  css  js  c++  java
  • 高可用Hadoop平台-实战尾声篇

    1.概述

      今天这篇博客就是《高可用Hadoop平台》的尾声篇了,从搭建安装到入门运行 Hadoop 版的 HelloWorld(WordCount 可以称的上是 Hadoop 版的 HelloWorld ),在到开发中需要用到的各个套件以及对套件的安装使用,在到 Hadoop 的实战,一路走来我们对在Hadoop平台下开发的基本流程应该都熟悉了。今天我们来完成在高可用Hadoop平台开发的最后一步,导出数据。

    2.导出数据目的

      首先,我来说明下为什么要导出数据,导出数据的目的是为了干嘛?

      我们都知道,我们当初统计这些数据的目标,就是为了来可视化这些数据结果;虽然结果我们是统计出来储存在 HDFS 上,但是,前段同学需要拿到这些数据,直接操作 HDFS 读取统计结果,这样的做法是不明智的,撇开安全性不说,时延就是一个很大的问题。所以,这里我们需要有一个步骤去完成数据的导出,将数据导出到 Mysql 之类的关系型数据库。这里我们用到的导出套件是Sqoop。

    3.Sqoop

    3.1安装包

      sqoop 下载地址

    3.2配置

      打开配置环境文件:

    sudo vi /etc/profile

      编辑 Sqoop 的环境,内容如下所示:

    export SQOOP_HOME=/home/hadoop/sqoop-1.4.5
    export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$ZK_HOME/bin:$HIVE_HOME/bin:$SQOOP_HOME/bin

    3.3sqoop-env.sh

      变动内容如下:

    #Set path to where bin/hadoop is available
    export HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.6.0
    
    #Set path to where hadoop-*-core.jar is available
    export HADOOP_MAPRED_HOME=/home/hadoop/hadoop-2.6.0
    
    #set the path to where bin/hbase is available
    #export HBASE_HOME=
    
    #Set the path to where bin/hive is available
    export HIVE_HOME=/home/hadoop/hive-0.14.0
    
    #Set the path for where zookeper config dir is
    #export ZOOCFGDIR=

      注:这里使用 Sqoop 自带的 ZooKeeper ,另外由于没有使用到 HBase ,故这里未配置 HBase 的路径指向。

    3.4异常

      Streaming result set com.mysql.jdbc.RowDataDynamic@12e9d40f is still active

      执行sqoop脚本时,出现这个异常是因为mysql的驱动的原因,使用最新的mysql驱动包。

      解决方案:

    wget http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.32.tar.gz

      然后解压到sqoop目录的lib目录下,重新执行脚本正常。

      至此,sqoop的安装配置以及使用到此完成。

    4.导出流程

      流程图如下所示:

      将hive数据库的TBLS表导入到hdfs,命令内容如下:

    sqoop import 
    --connect jdbc:mysql://10.211.55.26:3306/hive
    --username root
    --password root
    --table TBLS
    --fields-terminated-by ' '

      这里 JDBC 的链接地址指向 Mysql 库的链接地址。

      注:--fields-terminated-by ' ' 以tab分割

      --null-string '**'  将null用**替代(--是sqoop保留字符,不能使用)

      -m 1  指定一个map任务

      将hdfs上的文件导入到mysql数据库:

    sqoop export 
    -D sqoop.export.records.per.statement=100
    --connect jdbc:mysql://10.211.55.26:3306/sqoop
    --username root
    --password root
    --table portal
    --fields-terminated-by ','
    --export-dir "/home/hive/warehouse/logdfs_${yesterday}"
    --batch --update-key date,appkey
    --update-mode allowinsert;

      接下来,在我们导出数据成功后,我们可以将临时使用 hive 统计的结果表删除,若资源充足,我们可以保留最近 7 天的统计结果。

      删除脚本命令如下所示:

    hive -e "drop table pv_${yesterday};drop table reguser_${yesterday};drop table ip_${yesterday};drop table jumper_${yesterday};drop table logdfs_${yesterday};"

    5.总结

      在导出的时候,我们需要注意导出字段的分隔符,导出到目的地表名是否存在,书写导出命令是否正确。在导出异常时,根据具体的异常信息做相应的处理。

    6.结束语

      《高可用Hadoop平台》系列就和大家分享到这里,这一系列文章给对Hadoop方面感兴趣,以及打算从事Hadoop方面工作的人一点点帮助,大家在研究的过程当中若是有什么问题,可以加群讨论或是发送邮件给我,我会尽我所能为您解答,与君共勉!

  • 相关阅读:
    并行计算的技术路径
    Qt 中文编码问题记录
    rest_rpc 编译安装和测试 ubuntu18.04
    Qt QPorcess 启动外部程序失败的原因之一
    ubuntu 下 cesium的环境搭建
    Qt 渐变色笔记
    Qt编写的自定义控件为什么在QtDesigner中可见,在QtCreator中不可见
    Qt 编译及自动部署 库 工具集(自动复制生成的库及头文件到指定的安装路径)
    Windows10 OSG 编译安装及集成至Qt
    百度图像识别SDK简单使用
  • 原文地址:https://www.cnblogs.com/smartloli/p/4389412.html
Copyright © 2011-2022 走看看