第十六天 - Sqoop工具使用 - Hadoop、Hive、Sqoop常见问题 - 数据可视化工具ECharts.md

#第十六天 - Sqoop工具使用 - Hadoop、Hive、Sqoop常见问题 - 数据可视化工具ECharts

一、Sqoop从MySql导数据到Hive过程

#####导入至HDFS

  1. 指定命令 - 声明配置项 - 指定参数
  2. 命令语句 - 翻译成程序 - 打成jar包
  3. 将jar包(核心程序 - 依赖jiar包)提交至集群
  4. 简单的数据导出:只有Map阶段 – 数据源:关系型数据库(结构化的数据)
  5. 单表数据导出:将数据全部查出,拼接分隔符输出,Reduce阶段原样输出
  6. 默认使用4个MapTask执行 - 产生了四个结果文件 – 通过-m参数实现
  7. 默认使用第一列作为分割任务的列,确定固定的区间,--split--bug(指定分割列)
  8. 在相应的目录下生成结果,使用sql(聚合函数运算)

#####导入至Hive

  1. 确定路径:当前执行sqoop命令的家目录
  2. 导入为HDFS时指定的部分参数会被Hive导入时进行读取(如分隔符)
  3. 如果目标表不存在则创建(数据表结构信息(数据源的表结构) - 命令指定的相关参数)
  4. 如果目标表存在:默认追加导入,数据结构保持一致,目标Hive表的相关参数(分隔符)一致
  5. 导入数据 – 将中间目录的文件夹下的数据文件移动至内部表目录下

###二、Sqoop从Mysql导数据到Hive部分参数

#####数据来源

整表导出 --table

导出表中的某几列 --columns

查询语句(多表联查 - 条件查询) --query

出现条件时需要使用and $CONDITIONS

#####目标

1.HDFS(--target-dir)(默认分隔符:逗号) - 执行MapReduce后得到结果,读取结果文件,export

--delete-target-dir:导出前先删除目标目录(会自动检验是否存在)

数据文件输出格式:Output line formatting arguments

--fields-terminated-by 数据库表不同字段之间的数据分隔符

--lines-terminated-by 数据库表不同条目之间的数据分隔符

2.Hive,通过hql或HiveJDBC获取结果,export

注:在Hive中自动创建(默认内部表) – 导入到已创建的表

--hive-import 以Hive的方式进行导入

--hive-database 导入到指定的Hive库中

--external-table-dir 以外部表的形式创建

--hive -table 导入到指定的Hive表中

--hive-overwrite 是否覆盖导入

--create-hive-table 在Hive中创建表 - 只包含结构信息

执行Sqoop命令

sqoop import

–connect jdbc:mysql://SZ01:3306/w01

–username root

–password root

–table make

–hive-import

–hive-database default

–hive-table make1

-m 1

执行sqoop导入命令

连接信息(从mysql数据库中导出、主机名、端口、库名)

用户名

密码

要导出的表

导入到hive

要导入到hive中的default库

要导入到make1表

使用1个map task执行导入操作

运行时会出现以下错误:

Could not load org.apache.hadoop.hive.conf.HiveConf. Make sure HIVE_CONF_DIR is set correctly.

注:该错误会在Sqoop1.4.7版本中出现

解决办法:

在环境变量中添加以下语句

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$HIVE_HOME/lib/*

刷新环境变量文件

source .bash_profile

运行成功后在hive中无法找到该表

在hive中无法找到该表的原因如下:

  1. Hive 默认使用derby作为数据元信息存储数据库
  2. 在进行数据导入时如果不进行配置,会导致在mysql中无法正常写入数据结构信息
  3. 在Hive中无法查询到表的结构信息

解决办法:将hive-site.xml复制到sqoop中

cp /home/bigdata/apache-hive-1.2.2-bin/conf/hive-site.xml /home/bigdata/sqoop-1.4.7.bin/conf/

###三、sqoop从文本读取执行命令

编辑要读取命令的文件:

vi sqoopCmd

--connect

jdbc:mysql://192.168.128.121:3306/w01

--username

root

--password

root

--query

'select * from make where id < 10 and $CONDITIONS'

--target-dir

/tmp/make

--delete-target-dir

--hive-import

--hive-database

default

--hive-table

make2

--hive-overwrite

-m

1

执行命令

命令格式sqoop {cmd} --options-file {fileName}

sqoop import --options-file sqoopCmd

效果

1537257779049

###四、Hadoop、Hive、Sqoop常见问题

#####Hadoop

  • 节点启动失败

    • 报错信息:address already in use - bind Address:50070

      解决步骤:

      1. 查询端口占用:lsof -i:50070,查询到占用端口的进程:pid
      2. 杀死进程:kill -9 {pid}
    • 报错信息(namenode):could not find dir:xxx,找不到namenode格式化产生的路径

      解决方法:

      格式化namenode:

      hdfs namenode -format

      每次格式化时都会产生新的集群id -> clusterID

      保存信息的文件位于/home/bigdata/hadoop/data/dfs/name/current/VERSION

    • 报错信息(datanode):could not find dir:xxx,找不到datanode的路径

      保存信息的文件位于/home/bigdata/hadoop/data/dfs/dn/current/VERSION

      解决办法:

      删除之前遗留的信息:dn

      手动修改VERSION中的版本信息,使得一致

    • 要求输入密码

      解决办法:

      配置免密码登录(包括启动脚本的机器)

      1. 获取SZ01的公钥(公钥只需获取一次即可)

        ssh-keygen -t rsa

        在此过程中使用默认配置即可,即一路回车直到生成RSA文件

      2. 将SZ01的公钥发送给所有集群机器(包括自身),发送时需要输入密码

        ssh-copy-id bigdata@SZ01

        ssh-copy-id bigdata@SZ02

        ssh-copy-id bigdata@SZ03

    • 进程启动成功后消失

      查看启动日志根据日志处理错误。可以尝试重启节点,关闭防火墙

  • 操作HDFS

    • 报错信息:permission denied,权限不足

      解决办法:

      1. 伪装用户(启动hdfs进程的用户) ,配置环境变量HADOOP_USER
      2. hdfs-site.xml -> 关闭权限校验
    • 报错信息:无法建立通信,端口8020

      解决办法:保证hdfs进程启动

  • 运行MapReduce

    注:MapReduce以队列的方式进行

    杀死MapReduce运行进程的命令:

    hadoop job -kill {jobId}

    MapReduce的日志位置:

    (1)通过web的管理界面查看

    (2)$HADOOP_HOME/logs/userlogs下有相应的三个日志文件

    报错信息(远程调用执行)

    • 权限不足

      原因:中间结果的临时目录无相关权限

      解决办法:赋予该临时目录相应的权限

      hdfs dfs -chmod -R 777 /tmp

    • 结果输出目录已经存在,解决办法:重新指定一个不存在的结果输出目录

    • 源数据目录不存在,解决办法:指定正确的源数据目录

    • 逻辑错误

    • accept阶段卡住不动,解决办法:防火墙关闭

#####Hive

Hive的日志文件位置:在conf中指定的目录及文件名

/home/${user.home}

hive.log

  • 错误提示:parseException

    这种错误是在配置文件中配置项出错,会提示比较完整的错误位置信息,根据信息找到目标行/列修正即可

  • JDBC相关异常,启动过程中读取配置文件打开MySQL,检查报错信息,MySQL是否启动

  • MySQL数据库密码修改。在MySQL中,是根据host和user唯一确定的用户的密码(联合主键的方式实现)

    密码验证信息存放位置:mysql.user表中host,password,user,password_expired,权限相关

    修改密码方式:

    方式一:直接修改表 -> update mysql.user set password = password(‘xxx’) where host = ‘xx’ and user = ‘xx’

    方式二:set password = password(‘root’);此命令默认修改当前连接进入的密码,但是可以通过参数修改其他用户的密码

    添加或修改一条连接规则:

    GRANT ALL PRIVILEGES ON . to ‘user’@‘host’ IDENTIFIED by ‘root’ WITH GRANT OPTION;

    FLUSH PRIVILEGES;

  • ClassNotFountException:com.mysql.jdbc.Driver

    解决方法:拷贝驱动jar包至$HIVE_HOME/lib

  • Hive客户端或HiveJDBC操作Hive

    远程操作

    return code 1,原因是/tmp/hadoop-yarn/staging/anonymous权限不足

    解决方法:修改该文件夹的权限

    hdfs dfs -chmod -R 777 /tmp/hadoop-yarn/staging/anonymous

Sqoop

sqoop import

–connect jdbc:mysql://localhost:3306/w01

–username root

–password root

–table make

–hive-import

–hive-database default

–hive-table make1

-m

原因:连接mysql的jdbc中主机名不能为localhost,必须是ip地址或者是主机名(hosts中配置的)

sqoop import

–connect jdbc:mysql://SZ01:3306/w01

–username root

–password root

–table make

–hive-import

–hive-database default

–hive-table make1

-m

###五、数据可视化工具ECharts

网址:echarts.baidu.com

简介

ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等),底层依赖轻量级的矢量图形库 ZRender,提供直观,交互丰富,可高度个性化定制的数据可视化图表。

ECharts 提供了常规的折线图、柱状图、散点图、饼图、K线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap、旭日图,多维数据可视化的平行坐标,还有用于 BI 的漏斗图,仪表盘,并且支持图与图之间的混搭。

使用方法

从官网下载js文件,点击下载

将js文件导入到项目中

实例(官方案例)
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<!--1.引入相关的库文件-->
		<script type="text/javascript" src="js/echarts.min.js" ></script>
	</head>
	<body>
		<!--2.定义相关图标显示区域-->
		 <div id="main" style="width: 600px;height:400px;"></div>
		<!--3.配置图表显示内容 - 柱形图案例--> 
		<script type="text/javascript">
			/*主要参数:1.内置对象:echarts 2.配置对象:option 3.相关方法:init(),setOption() */
			var myChart = echarts.init(document.getElementById("main"));
			 // 指定图表的配置项和数据
	        var option = {
	            title: {
	                text: 'ECharts 入门示例'
	            },
	            tooltip: {},
	            legend: {
	                data:['销量']
	            },
	            xAxis: {
	                data: ["衬衫","羊毛衫","雪纺衫","裤子","高跟鞋","袜子"]
	            },
	            yAxis: {},
	            series: [{
	                name: '销量',
	                type: 'bar',
	                data: [5, 20, 36, 10, 10, 20]
	            }]
	        };
	        myChart.setOption(option);
		</script>
	</body>
</html>

运行效果

1537275377649

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值