2018-04-14 00:58:27 qq_41577045 阅读数 1207
  • Spark开发工程师(含项目)

    本课程为大数据金融信贷项目实战课,着重讲解企业中常用的大数据技术理论与实战,如Hadoop、Hive、HBase、Sqoop、Flume、Kafka、Spark Streaming、Spark SQL、Spark Structured Streaming等。课程包含离线项目和实时项目,从项目业务需求、技术选型、架构设计、集群安装部署、集成开发以及项目可视化进行全方位实战讲解。

    2187 人正在学习 去看看 杨俊

参考:http://ihoge.cn/2018/HiveSpark.html

一、Hive安装

1.Hive简介

​ Hive是Facebook开发的构建于Hadoop集群之上的数据仓库应用,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。

​ Hive是一个可以提供有效的、合理的且直观的组织和使用数据的模型,即使对于经验丰富的Java开发工程师来说,将这些常见的数据运算对应到底层的MapReduce Java API也是令人敬畏的。Hive可以帮用户做这些工作,用户就可以集中精力关注查询本身了。Hive可以将大多数的查询转换为MapReduce任务。Hive最适合于数据仓库应用程序,使用该应用程序进行相关的静态数据分析,不需要快速响应给出结果,而且数据本身也不会频繁变化。

​ Hive不是一个完整的数据库。Hadoop以及HDFS的设计本身约束和局限性限制了Hive所能胜任的工作。最大的限制就是Hive不支持记录级别的更新、插入或者删除。用户可以通过查询生成新表或将查询结果导入到文件中去。因为,Hadoop是一个面向批处理的系统,而MapReduce启动任务启动过程需要消耗很长时间,所以Hive延时也比较长。Hive还不支持事务。因此,Hive不支持联机事务处理(OLTP),更接近于一个联机分析技术(OLAP)工具,但是,目前还没有满足“联机”部分。

​ Hive提供了一系列的工具,可以用来进行数据提取转化加载(ETL),其中,ETL是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。因此,Hive是最适合数据仓库应用程序的,它可以维护海量数据,而且可以对数据进行挖掘,然后形成意见和报告等。

​ 因为大多数的数据仓库应用程序是基于SQL的关系数据库现实的,所以,Hive降低了将这些应用程序移植到Hadoop上的障碍。如果用户懂得SQL,那么学习使用Hive会很容易。因为Hive定义了简单的类SQL 查询语言——HiveQL,这里值得一提的是,与SQLServer、Oracle相比,HiveQL和MySQL提供的SQL语言更接近。同样的,相对于其他的Hadoop语言和工具来说,Hive也使得开发者将基于SQL的应用程序移植到Hadoop变得更加容易。

2.Hive安装

​ 接下来,开始Hive的安装,安装Hive之前,首先需要装好Hadoop和Spark。在Hive官网可下载最新版本Hive,并且能够查阅版本改动说明,本次课程采用1.2.2版本进行安装。可以采用WinSCP传输apache-hive-1.2.2-bin.tar至虚拟机“下载”文件夹中,再进行后续安装。

cd ~/下载                                              # 进入下载文件夹
sudo tar -zxf apache-hive-1.2.2-bin.tar.gz -C /usr/local    # 安装至/usr/local文件夹内
cd /usr/local                                         # 进入/usr/local文件夹
sudo mv ./apache-hive-1.2.2-bin/ ./hive               # 更名为hive
sudo chown -R hadoop ./hive                           # 修改hive权限
mkdir -p /usr/local/hive/warehouse                    # 创建元数据存储文件夹
sudo chmod a+rwx /usr/local/hive/warehouse            # 修改文件权限  

然后添加Hive安装路径至系统环境变量

vim ~/.profile

添加下述路径

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

并使之生效

source ~/.profile

修改hive读取spark的jar包地址

cd /usr/local/hive/bin
vim hive

修改为

# add Spark assembly jar to the classpath
if [[ -n "$SPARK_HOME" ]]
then
  sparkAssemblyPath=`ls ${SPARK_HOME}/jars/*.jar`
  CLASSPATH="${CLASSPATH}:${sparkAssemblyPath}"
fi

然后采用hive默认配置

cd /usr/local/hive/conf
cp hive-default.xml.template hive-default.xml

尝试启动Hive,此时启动是以本地模式进行启动,能正常启动则说明安装成功。

start-all.sh
hive

​ 若出现jline等jar包错误,则需要进入到hadoop安装目录下的share/hadoop/yarn/lib下删除jline-0.9.94.jar文件,再启动hive即可(因为高版本的Hadoop对Hive有捆绑)。

cd /usr/local/hadoop/share/hadoop/yarn/lib
rm -rf jline-0.9.94.jar 

3. Hive的基本配置

​ 在安装Hive时,默认情况下,元数据存储在Derby数据库中。Derby是一个完全用Java编写的数据库,所以可以跨平台,但需要在JVM中运行 。因为多用户和系统可能需要并发访问元数据存储,所以默认的内置数据库并不适用于生产环境。任何一个适用于JDBC进行连接的数据库都可用作元数据库存储,这里我们把MySQL作为存储元数据的数据库。接下来,我们分别对这两种方式进行介绍,即使用Derby数据库的方式和使用MySQL数据库的方式。

3.1 使用Derby作为元数据库

​ 本地模式中,用户的“表”等元数据信息,都默认存储在file://user/hive/warehouse,对于其他模式默认存储路径是hdfs://namenode_server/user/hive/warehouse。使用如下命令编辑hive-site.xml文件:

vim /usr/local/hive/conf/hive-site.xml  

在hive-site.xml文件添加以下内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/usr/local/hive/warehouse</value>   
    <description>location of default database for the warehouse</description>
  </property>
<property>
    <name>javax.jdo.option.ConnectionURL</name>
     <value>jdbc:derby:;databaseName=/usr/local/hive/metastore_db;create=true</value>                           
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
</configuration>

​ 若要以伪分布式模式和分布式模式配置Hive,只需根据Hadoop配置文件core-site.xml中fs.defaultFS的值对hive.metastore.warehouse.dir 进行相应修改即可。配置完成之后即可启动Hive,然后尝试使用HiveQL命令创建表。

hive
show databases;
create database if not exists derby;
use derby;
create table x(a int);
select * from x;
drop table x;
exit;

3.2 使用MySQL作为元数据库

3.2.1 安装MySQL

首先,查看并卸载系统自带的MySQL相关安装包(或之前安装过MySQL),命令如下:

sudo apt install rpm
rpm -qa | grep mysql

若没有安装rpm工具,系统会有提示,按照提示安装即可。接下来查看是否有系统自带的MySQL相关安装包,若有,按下面命令删除:

sudo rpm -e --nodeps mysql-libs-xxxxxx       

注:xxxxx是已经安装的mysql的版本号,然后进行MySQL的安装

sudo apt-get install mysql-server        

安装完成后,启动设置MySQL服务

sudo service mysql start
mysql -u root -p

当然,还可使用下列命令进行额外设置

sudo chkconfig mysql on                              # 设置开机自动启动
sudo /usr/bin/mysqladmin -u root password '123'      # 设置root用户密码

接下来,创建hive用户及其数据库等,用于存放Hive的元数据

sudo vi /etc/mysql/my.cnf
注释掉:bind-address            = 127.0.0.1

create database hive;
grant all on *.* to hive@localhost identified by 'hive'; 
flush privileges;
exit;

切换hive用户登陆

mysql -u hive -p hive
show databases;

若能看到hive数据库存在,则说明创建成功。

3.2.2 修改Hive配置

接下来,修改hive-site.xml文件

vim /usr/local/hive/conf/hive-site.xml  

输入下列信息

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>username to use against metastore database</description>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
    <description>password to use against metastore database</description>
  </property>
</configuration>

或者指定元数据文件夹

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
    <name>hive.metastore.warehouse.dir</name>
    <value>/usr/local/hive/warehouse</value>   
    <description>location of default database for the warehouse</description>
  </property>
<property>
    <name>javax.jdo.option.ConnectionURL</name>
   <value>jdbc:mysql://localhost:3306/hive;createDatebaseIfNotExist=true</value>                           
    <description>JDBC connect string for a JDBC metastore</description>
  </property>
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
<property> 
   <name>javax.jdo.option.ConnectionPassword </name> 
   <value>hive</value> 
</property> 
 <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>Username to use against metastore database</description>
   </property>
</configuration>

然后将JDBC文件放到hive的lib文件夹内,JDBC包的下载参考前述部分

cd ~/下载
cp mysql-connector-java-5.1.26-bin.jar /usr/local/hive/lib
mkdir -p /usr/local/hive/tmp
sudo chmod a+rwx /usr/local/hive/tmp

也可从官网直接下载最新版jdbc

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

然后进行解压安装。当然,如果之前删除了jline-0.9.94.jar,此时需要把hive对应的jar包放进去

cp /usr/local/hive/lib/jline-2.12.jar  /usr/local/hadoop/share/hadoop/yarn/lib

然后尝试启动hive

schematool -dbType mysql -initSchema
start-all.sh
hive

成启动后,即可输入hive –help查看hive常用命令。

二、Hive使用

1.Hive基本数据类型

首先,我们简单叙述一下HiveQL的基本数据类型。

Hive支持基本数据类型和复杂类型, 基本数据类型主要有数值类型(INT、FLOAT、DOUBLE ) 、布尔型和字符串, 复杂类型有三种:ARRAY、MAP 和 STRUCT。

1.1 基本数据类型

  • TINYINT: 1个字节
  • SMALLINT: 2个字节
  • INT: 4个字节
  • BIGINT: 8个字节
  • BOOLEAN: TRUE/FALSE
  • FLOAT: 4个字节,单精度浮点型
  • DOUBLE: 8个字节,双精度浮点型STRING 字符串

1. 2 复杂数据类型

  • ARRAY: 有序字段
  • MAP: 无序字段
  • STRUCT: 一组命名的字段

2.常用的HiveQL操作命令

​ Hive常用的HiveQL操作命令主要包括:数据定义、数据操作。接下来详细介绍一下这些命令即用法(想要了解更多请参照《Hive编程指南》一书)。

2.1 数据定义

主要用于创建修改和删除数据库、表、视图、函数和索引。

  • 创建、修改和删除数据库

    create database if not exists hive;       #创建数据库
    show databases;                           #查看Hive中包含数据库
    show databases like 'h.*';                #查看Hive中以h开头数据库
    describe databases;                       #查看hive数据库位置等信息
    alter database hive set dbproperties;     #为hive设置键值对属性
    use hive;                                 #切换到hive数据库下
    drop database if exists hive;             #删除不含表的数据库
    drop database if exists hive cascade;     #删除数据库和它中的表

    注意,除 dbproperties属性外,数据库的元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置,没有办法删除或重置数据库属性。

  • 创建、修改和删除表

    
    #创建内部表(管理表)
    
    create table if not exists hive.usr(
        name string comment 'username',
        pwd string comment 'password',
        address struct<street:string,city:string,state:string,zip:int>,
        comment  'home address',
        identify map<int,tinyint> comment 'number,sex') 
        comment 'description of the table'  
       tblproperties('creator'='me','time'='2016.1.1'); 
    
    #创建外部表
    
    create external table if not exists usr2(
        name string,
        pwd string,
    address struct<street:string,city:string,state:string,zip:int>,
        identify map<int,tinyint>) 
        row format delimited fields terminated by ','
       location '/usr/local/hive/warehouse/hive.db/usr'; 
    
    #创建分区表
    
    create table if not exists usr3(
        name string,
        pwd string,
        address struct<street:string,city:string,state:string,zip:int>,
        identify map<int,tinyint>) 
        partitioned by(city string,state string);    
    
    #复制usr表的表模式  
    
    create table if not exists hive.usr1 like hive.usr;
    show tables in hive;  
    show tables 'u.*';        #查看hive中以u开头的表
    describe hive.usr;        #查看usr表相关信息
    alter table usr rename to custom;      #重命名表 
    
    #为表增加一个分区
    
    alter table usr2 add if not exists 
       partition(city=”beijing”,state=”China”) 
       location '/usr/local/hive/warehouse/usr2/China/beijing'; 
    
    #修改分区路径
    
    alter table usr2 partition(city=”beijing”,state=”China”)
       set location '/usr/local/hive/warehouse/usr2/CH/beijing';
    
    #删除分区
    
    alter table usr2 drop if exists  partition(city=”beijing”,state=”China”)
    
    #修改列信息
    
    alter table usr change column pwd password string after address;
    alter table usr add columns(hobby string);                  #增加列
    alter table usr replace columns(uname string);              #删除替换列
    alter table usr set tblproperties('creator'='liming');      #修改表属性
    alter table usr2 partition(city=”beijing”,state=”China”)    #修改存储属性
    set fileformat sequencefile;             
    use hive;                                                   #切换到hive数据库下
    drop table if exists usr1;                                  #删除表
    drop database if exists hive cascade;                       #删除数据库和它中的表
  • 视图和索引的创建、修改和删除

    基本语法格式

    create view view_name as....;                #创建视图
    alter view view_name set tblproperties(…);   #修改视图

    因为视图是只读的,所以 对于视图只允许改变元数据中的 tblproperties属性。

    
    #删除视图
    
    drop view if exists view_name;
    
    #创建索引
    
    create index index_name on table table_name(partition_name/column_name)  
    as 'org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler' with deferred rebuild....; 

    这里’org.apache.hadoop.hive.ql.index.compact.CompactIndexHandler’是一个索引处理器,即一个实现了索引接口的Java类,另外Hive还有其他的索引实现。

    alter index index_name on table table_name partition(...)  rebulid;   #重建索引

    如果使用 deferred rebuild,那么新索引成空白状态,任何时候可以进行第一次索引创建或重建。

    show formatted index on table_name;                       #显示索引
    drop index if exists index_name on table table_name;      #删除索引

2.2 数据操作

主要实现的是将数据装载到表中(或是从表中导出),并进行相应查询操作

  • 向表中装载数据

    create table if not exists hive.stu(id int,name string) 
    row format delimited fields terminated by '\t';
    create table if not exists hive.course(cid int,sid int) 
    row format delimited fields terminated by '\t';

    向表中装载数据有两种方法:从文件中导入和通过查询语句插入。

    • 从文件中导入

    假如这个表中的记录存储于文件stu.txt中,该文件的存储路径为usr/local/hadoop/examples/stu.txt,内容如下。

    1 Hello
    2 World
    3 CDA
    load data local inpath '/usr/local/hadoop/examples/stu.txt' overwrite into table stu;
    • 通过查询语句插入

    使用如下命令,创建stu1表,它和stu表属性相同,我们要把从stu表中查询得到的数据插入到stu1中:

    create table stu1 as select id,name from stu;

    上面是创建表,并直接向新表插入数据;若表已经存在,向表中插入数据需执行以下命令:

    insert overwrite table stu1 select id,name from stu where(条件);

    这里关键字overwrite的作用是替换掉表(或分区)中原有数据,换成into关键字,直接追加到原有内容后。

  • 写入临时文件

    insert overwrite local directory '/usr/local/hadoop/tmp/stu'  select id,name from stu;
  • 查询操作

    select id,name,
    case 
    when id=1 then 'first' 
    when id=2 then 'second'
    else 'third'

2.3 连接

​ 连接(join)是将两个表中在共同数据项上相互匹配的那些行合并起来, HiveQL 的连接分为内连接、左向外连接、右向外连接、全外连接和半连接 5 种。

  • 内连接(等值连接)

    内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行。

    首先,我们先把以下内容插入到course表中(自行完成)。

1 3
2 1
3 1

​ 下面, 查询stu和course表中学号相同的所有行,命令如下:

select stu.*, course.* from stu join course on(stu .id=course .sid);
  • 左连接

    ​ 左连接的结果集包括“LEFT OUTER”子句中指定的左表的所有行, 而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行, 则在相关联的结果集中右表的所有选择列均为空值,命令如下:

select stu.*, course.* from stu left outer join course on(stu .id=course .sid); 
  • 右连接

    ​ 右连接是左向外连接的反向连接,将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。命令如下:

select stu.*, course.* from stu right outer join course on(stu .id=course .sid); 
  • 全连接

    ​ 全连接返回左表和右表中的所有行。当某行在另一表中没有匹配行时,则另一个表的选择列表包含空值。如果表之间有匹配行,则整个结果集包含基表的数据值。命令如下:

select stu.*, course.* from stu full outer join course on(stu .id=course .sid); 
  • 半连接

    ​ 半连接是 Hive 所特有的, Hive 不支持 in 操作,但是拥有替代的方案; left semi join, 称为半连接, 需要注意的是连接的表不能在查询的列中,只能出现在 on 子句中。命令如下:

select stu.* from stu left semi join course on(stu .id=course .sid); 

三、Spark与Hive集成

1.安装Spark

​ 为了让Spark能够访问Hive,必须为Spark添加Hive支持。Spark官方提供的预编译版本,通常是不包含Hive支持的,需要采用源码编译,编译得到一个包含Hive支持的Spark版本。首先测试一下电脑上已经安装的Spark版本是否支持Hive

spark-shell

这样就启动进入了spark-shell,然后输入:

import org.apache.spark.sql.hive.HiveContext    

如果报错,则说明spark无法识别org.apache.spark.sql.hive.HiveContext,这时我们就需要采用源码编译方法得到支持hive的spark版本。

  • 下载源码文件

    ​ 进入官网后,可以按照下图配置选择“2.1.0(Dec 28, 2016)”和“SourceCode”,然后,在图中红色方框内,有个“Download Spark: spark-2.1.0.tgz”的下载链接,点击该链接就可以下载Spark源码文件了。

  • 编译过程

    cd /home/hadoop/spark-2.0.2
    ./dev/make-distribution.sh —tgz —name h27hive -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.1 -Phive -Phive-thriftserver -DskipTests

    或可选择直接安装已编译好的版本,把下好的spark-2.0.2-bin-h27hive.tgz放到下载文件夹内

  • Spark解压安装

    cd ~/下载                                              # 进入下载文件夹
    sudo tar -zxf spark-2.0.2-bin-h27hive.tgz -C /usr/local   # 安装至/usr/local文件夹内
    cd /usr/local                                         # 进入/usr/local文件夹
    sudo mv ./spark-1.4.0-bin-hadoop2.4/ ./spark          # 更名为spark
    sudo chown -R hadoop ./spark                          # 修改sqoop权限
  • 添加环境变量

    注,如果电脑上已经装了另一个spark,此处可不增设环境变量

    vim ~/.profile

    添加spark安装路径

    
    #spark
    
    export SPARK_HOME=/usr/local/spark
    export PATH=$PATH:$SPARK_HOME/bin

    并保存修改

    source ~/.profile
  • 修改Spark配置

    cd /usr/local/spark/conf                              # 进入spark配置文件夹
    sudo cp spark-env.sh.template spark-env.sh            # 复制spark-env临时文件为配置文件
    vim spark-env.sh                                      # 编辑spark配置文件

    添加下述配置信息

    export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

    有了上面的配置信息以后,Spark就可以把数据存储到Hadoop分布式文件系统HDFS中,也可以从HDFS中读取数据。如果没有配置上面信息,Spark就只能读写本地数据,无法读写HDFS数据。在伪分布式模式下仅测试是否安装成功时,其他配置暂时可不做修改。

  • 运行样例程序

    cd /usr/local/spark
    bin/run-example SparkPi 2>&1 | grep "Pi is"
  • 放置Hive配置文件

    为了让Spark能够访问Hive,需要把Hive的配置文件hive-site.xml拷贝到Spark的conf目录下

    cd /usr/local/spark/conf
    cp /usr/local/hive/conf/hive-site.xml .
    ll
  • 测试是否集成成功

    spark-shell

    然后输入

    import org.apache.spark.sql.hive.HiveContext

2.在Hive中创建数据库和表

首先启动MySQL数据库:

service mysql start  

​ 由于Hive是基于Hadoop的数据仓库,使用HiveQL语言撰写的查询语句,最终都会被Hive自动解析成MapReduce任务由Hadoop去具体执行,因此,需要启动Hadoop,然后再启动Hive。
然后执行以下命令启动Hadoop:

start-all.sh

Hadoop启动成功以后,可以再启动Hive:

hive  

然后在hive命令提示符内进行操作

create database if not exists sparktest;
show databases;
 create table if not exists sparktest.student(
> id int,
> name string,
> gender string,
> age int);
use sparktest;
show tables;
insert into student values(1,'Xueqian','F',23);
insert into student values(2,'Weiliang','M',24);
select * from student;

通过上面操作,我们就在Hive中创建了sparktest.student表,这个表有两条数据。

3.连接Hive读写数据

​ 现在我们看如何使用Spark读写Hive中的数据。注意,操作到这里之前,你一定已经按照前面的各个操作步骤,启动了Hadoop、Hive、MySQL和spark-shell(包含Hive支持)。在进行编程之前,我们需要做一些准备工作,我们需要修改“/usr/local/sparkwithhive/conf/spark-env.sh”这个配置文件:

cd /usr/local/spark/conf/
vim spark-env.sh

这样就使用vim编辑器打开了spark-env.sh这个文件,输入下面内容:

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export CLASSPATH=$CLASSPATH:/usr/local/hive/lib
export SCALA_HOME=/usr/local/scala
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export HIVE_CONF_DIR=/usr/local/hive/conf
export SPARK_CLASSPATH=$SPARK_CLASSPATH:/usr/local/hive/lib/mysql-connector-java-5.1.26-bin.jar

保存并推出,然后启动spark-shell

spark-shell

然后在shell界面中输入

import org.apache.spark.sql.Row
import org.apache.spark.sql.SparkSession
case class Record(key: Int, value: String)
val warehouseLocation = "spark-warehouse"
val spark = SparkSession.builder().appName("Spark Hive Example").config("spark.sql.warehouse.dir", warehouseLocation).enableHiveSupport().getOrCreate()
import spark.implicits._
import spark.sql
sql("SELECT * FROM sparktest.student").show()

然后再开一个命令行界面,启动hive界面,查看spark-shell中对hive表插入数据的结果

hive

然后输入

use sparktest;
select * from student;

然后在spark-shell中进行数据插入

import java.util.Properties
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
//下面我们设置两条数据表示两个学生信息
val studentRDD = spark.sparkContext.parallelize(Array("3 Rongcheng M 26","4 Guanhua M 27")).map(_.split(" "))
//下面要设置模式信息
val schema = StructType(List(StructField("id", IntegerType, true),StructField("name", StringType, true),StructField("gender", StringType, true),StructField("age", IntegerType, true)))
//下面创建Row对象,每个Row对象都是rowRDD中的一行
val rowRDD = studentRDD.map(p => Row(p(0).toInt, p(1).trim, p(2).trim, p(3).toInt))
//建立起Row对象和模式之间的对应关系,也就是把数据和模式对应起来
val studentDF = spark.createDataFrame(rowRDD, schema)
//查看studentDF
studentDF.show()
//下面注册临时表
studentDF.registerTempTable("tempTable")
sql("insert into sparktest.student select * from tempTable")

然后切换到hive窗口,查看数据库内容变化

select * from student;

能够查询到新增数据结果,则说明操作成功。

2019-07-14 16:12:02 qq_37296285 阅读数 178
  • Spark开发工程师(含项目)

    本课程为大数据金融信贷项目实战课,着重讲解企业中常用的大数据技术理论与实战,如Hadoop、Hive、HBase、Sqoop、Flume、Kafka、Spark Streaming、Spark SQL、Spark Structured Streaming等。课程包含离线项目和实时项目,从项目业务需求、技术选型、架构设计、集群安装部署、集成开发以及项目可视化进行全方位实战讲解。

    2187 人正在学习 去看看 杨俊

使用spark的内置hive

不推荐使用,比较容易出现问题

ps:版本为1.2.1
ps:需要注意内置hive是非常容易出现问题的
1.先启动集群/opt/software/spark-2.2.0-bin-hadoop2.7/sbin/start-all.sh
2.进入到spark-shell模式/opt/software/spark-2.2.0-bin-hadoop2.7/bin/spark-shell --master spark://hadoop01:7077
3.在spark-shell下操作hive
spark.sql(“show tables”).show 查询所有hive的表
spark.sql(“CREATE TABLE IF NOT EXISTS src (key INT,value STRING)”) 创建表
spark.sql(“LOAD DATA LOCAL INPATH ‘/opt/software/spark-2.2.0-bin-hadoop2.7/examples/src/main/resources/kv1.txt’ INTO TABLE src”) 添加数据
spark.sql(“SELECT * FROM src”).show 查询表中数据
会出现一个问题FileNotFoundException 没有找到文件
通过在主节点和从节点查询可以发现,主节点存在spark-warehouse目录 目录中是存在数据的
但是在从节点中没有这个文件夹,所以此时将文件夹分发到从节点
scp -r ./spark-warehouse/ root@hadoop02:$PWD
再次执行查询
ps:这样表面看查询是没什么问题了,但是实际问题在于是将master节点上的数据分发到从节点上的,那么不可能说每次操作有了数据都执行拷贝操作,所以此时就需要使用HDFS来进行存储数据了
所以先将所有从节点上的spark-warehouse删除掉
删除后将主节点上的spark-warehouse和metastor_db删除掉
然后在启动spark-shell的时候添加一个命令
–conf spark.sql.warehouse.dir=hdfs://hadoop01:8020/spark_warehouse
此方法只做一次启动即可 后续再启动集群的时候就无需添加这个命令了,因为记录在metastore_db中了
ps:spark-sql中可以直接使用SQL语句操作

集成外部hive

1.将Hive中的hive-site.xml软连接到Spark安装目录下的conf目录下。[主节点有即可]
ln -s /opt/software/apache-hive-1.2.1-bin/conf/hive-site.xml /opt/software/spark-2.2.0-bin-hadoop2.7/conf/hive-site.xml
备注:直接拷贝进去也行,目的就是为了让spark读取hive-site其中的内容(推荐)
2.打开spark shell
将mysql驱动jar包拷贝到spark的bin目录下
./spark-shell(spark-shell命令所在位置) --master spark://mini2:7077 --jars mysql-connector-java-5.1.32.jar(驱动所在位置)

注意:因为涉及到连接hive的操作,启动该命令,必须保证mysql服务已经开启;但是跟hive服务其实没关系,主要要的就是那个mysql元数据库服务

ps:做完外部hive链接需要注意,因为hive-site.xml文件是在Spark的conf目录下,若直接启动spark-shell无论是单机版还是集群版都会出现报错 Error creating transactional connection factory 原因在于,启动时会加载hive-site.xml文件,所以必须添加jar路径, 为了以后使用建议删除软连接,需要的时候在做外部hive的连接(即如果想要不加载jar路径又可以正常使用spark shell的话,需要将conf下的hive-site.xml文件删除,或将软连接删除,看你当初是怎么加进去的就怎么删除)

集成hive的原理(hive on spark)

在这里插入图片描述

一些问题总结

若要把Spark SQL连接到一个部署好的Hive上,你必须把hive-site.xml复制到 Spark的配置文件目录中($SPARK_HOME/conf)。即使没有部署好Hive(即mysql有根本没有hive的源数据库,代码无法操纵元数据库中的数据),Spark SQL也可以运行。 需要注意的是,如果你没有部署好Hive,Spark SQL会在当前的工作目录中(即程序结构层级上)创建出自己的Hive 元数据仓库,叫作 metastore_db。此外,如果你尝试使用 HiveQL 中的 CREATE TABLE (并非 CREATE EXTERNAL TABLE)语句来创建表,这些表会被放在你默认的文件系统中的 /user/hive/warehouse 目录中(如果你的 classpath 中有配好的 hdfs-site.xml,默认的文件系统就是 HDFS,否则就是本地文件系统)。

2018-02-28 09:54:19 u011254180 阅读数 4804
  • Spark开发工程师(含项目)

    本课程为大数据金融信贷项目实战课,着重讲解企业中常用的大数据技术理论与实战,如Hadoop、Hive、HBase、Sqoop、Flume、Kafka、Spark Streaming、Spark SQL、Spark Structured Streaming等。课程包含离线项目和实时项目,从项目业务需求、技术选型、架构设计、集群安装部署、集成开发以及项目可视化进行全方位实战讲解。

    2187 人正在学习 去看看 杨俊

虚拟机环境:centos6

下述软件版本依自己本机版本相应修改


一、Spark SQL 与Hive集成(spark-shell)

1.需要配置的项目

    1)hive的配置文件hive-site.xml拷贝到spark conf目录,同时添加metastore的url配置。

        执行操作: vi hive-site.xml,添加如下内容:

<property>
	<name>hive.metastore.uris</name>
	<value>thrift://node1:9083</value>
</property>
    2)拷贝hive中的mysql jar包到 spark 的 lib 目录下
cp hive-0.13.1-bin/lib/mysql-connector-java-5.1.27-bin.jar spark-1.6-bin/lib/

    3)检查spark-env.sh 文件中的配置项

            执行操作: vi spark-env.sh,添加如下内容:

HADOOP_CONF_DIR=/opt/soft/hadoop-2.6.4/etc/hadoop

2.启动服务

    1)检查mysql是否启动

        # 查看状态:service mysqld status

        #启动:service mysqld start

    2)启动hive metastore服务

          bin/hive --service metastore

    3)启动hive

           bin/hive,进入hive命令行

    4)创建本地文件 kfk.txt,内容如下:

0001 spark
0002 hive
0003 hbase
0004 hadoop

    5)执行 hive语句

hive> show databases;
hive> create database kfk;
hive> create table if not exists test(userid string,username string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS textfile;
hive> load data local inpath "/opt/data/kfk.txt" into table test;

    6)启动 spark-shell

        bin/spark-shell,进入spark-shell中,执行操作,返回结果

spark.sql("select * from kfk.test").show
0001 spark
0002 hive
0003 hbase
0004 hadoop


二、Spark SQL 与Hive集成(spark-sql)

    1)启动spark-sql,进入该命令行

        bin/spark-sql

    2)查看数据库

        show databases;

default
kfk

    3)使用数据库,并查询表

# 使用数据库
use kfk
# 查看表
show tables;
# 查看表数据
select * from test;


三、Spark SQL之ThriftServer和beeline使用

    1)启动ThriftServer

        sbin/start-thriftserver.sh

    2)启动beeline    

        bin/beeline !connect jdbc:hive2://node1:10000

        # 查看数据库
        show databases;
        # 查看表数据

        select * from kfk.test;


四、Spark SQL与MySQL集成

    1)启动spark-shell,进入shell命令行

            sbin/spark-shell

    2)spark-shell命令行中输入 :paste 可以输入整段命令

val jdbcDF = spark
  .read
  .format("jdbc")
  .option("url", "jdbc:mysql://node1:3306/test")
  .option("dbtable", "spark1")
  .option("user", "root")
  .option("password", 1234)
  .load()

        输入 ctr+d退出整段输入,打印读取数据

        jdbcDF.show


五、Spark SQL与HBase集成

    Spark SQL与HBase集成,其核心就是Spark Sql通过hive外部表来获取HBase的表数据。

    1)拷贝HBase的包和hive包到 spark的 lib目录下

    

    2)启动spark-shell,进入命令行
        bin/spark-shell

        val df =spark.sql("select count(1) from weblogs").show






2017-05-26 22:44:38 pucao_cug 阅读数 6502
  • Spark开发工程师(含项目)

    本课程为大数据金融信贷项目实战课,着重讲解企业中常用的大数据技术理论与实战,如Hadoop、Hive、HBase、Sqoop、Flume、Kafka、Spark Streaming、Spark SQL、Spark Structured Streaming等。课程包含离线项目和实时项目,从项目业务需求、技术选型、架构设计、集群安装部署、集成开发以及项目可视化进行全方位实战讲解。

    2187 人正在学习 去看看 杨俊


概述

1各个机器安装概况

2下载和解压缩各种包

3配置环境变量

4修改hostname文件

        4.1在3台机器上执行hostname命令

        4.2编辑hosts文件

5 Hadoop的安装和启动

        5.1设置ssh免密码登录

        5.2 创建一堆目录

        5.3 对conf目录下的文件做配置

                 5.3.1修改core-site.xml

                 5.3.2修改hadoop-env.sh

                 5.3.3修改hdfs-site.xml

                 5.3.4新建并且修改mapred-site.xml

                 5.3.5修改slaves文件

                 5.3.6修改yarn-site.xml文件

         5.4启动hadoop

6 Spark的安装和启动

         6.1对conf目录下的文件做配置

                  6.1.1 新建spark-env.h文件

                  6.1.2 新建slaves文件

                  6.1.3新建spark-defaults.conf文件

          6.2在HDFS上创建目录

          6.3启动spark

7 Hive的配置和启动

          7.1执行命令创建HDFS目录

          7.2对conf目录下的配置文件进行配置

                    7.2.1新建hive-env.sh文件并进行修改

                    7.2.2对hive-site.xml文件进行配置

                             7.2.2.1目录相关的配置

                             7.2.2.2Mysql数据库相关的配置

                             7.2.2.3其他配置

           7.3将MySQL驱动包上载到lib目录

           7.4将Spark下的某些jar包拷贝到hive目录下

           7.5对hive所要连接的数据库做初始化

           7.6启动hive命令行窗口

           7.7在hive中创建数据表

8对Hive On Spark环境做测试

           8.1执行select  count命令进行测试

           8.2 在浏览器里访问spark的UI界面


      关键字:Linux  CentOS   Java  Scala   Hive On Spark

         版本号:CentOS7   JDK1.8  Scala2.11.8    Hive2.1.1   Spark-1.6.3-with-out-hive   Hadoop2.8.0

概述

          Hive默认的执行引擎是Hadoop提供的MapReduce,而MapReduce的缺点是读写磁盘太多,为了提高Hive执行某些SQL的效率,有必要将Hive的执行引擎替换为Spark,这就是Hive On Spark。不过Hive On Spark的环境搭建的确是有点麻烦,主要是因为Hive和Spark的版本不能随意搭配,首先Spark必须是without-hive版本才可以(编译时用特殊命令申明排除掉某些jar包)。要拥有这样的Spark的版本,你可以自己编译,但是要自己编译还得做很多准备工作,也是较为麻烦和费时的。其次拥有了without-hive版本的Spark,还得选择合适的Hive版本才可以,也就是说Hive和Spark必须使用恰当的版本,才能搭建Hive On Spark环境。

          自己编译without-hive版本的Spark这里暂时不讲了,留在后面的博文中在说,本文先使用官方发布的without-hive版的Spark和官方发布的Hive版本来搭建Hive On Spark环境。

1 各个机器安装概况

          3台机器是master、slave1、slave2,使用的操作系统是CentOS7(使用Ubuntu也可以,用为用的是压缩包,所以安装方法都一样),3台机器的信息如下表:

 

master

slave1

slave2

内存

2G(越大越好)

2G(越大越好)

2G(越大越好)

IP地址

192.168.27.141

192.168.27.142

192.168.27.143

节点类型

Hadoop的namenode节点

Spark的master节点

Hadoop的datanode节点

Spark的slave节点

Hadoop的datanode节点

Spark的slave节点

JAVA_HOME

/opt/java/jdk1.8.0_121

/opt/java/jdk1.8.0_121

/opt/java/jdk1.8.0_121

SCALA_HOME

/opt/scala/scala-2.11.8

/opt/scala/scala-2.11.8

/opt/scala/scala-2.11.8

HADOOP_HOME

/opt/hadoop/hadoop-2.8.0

/opt/hadoop/hadoop-2.8.0

/opt/hadoop/hadoop-2.8.0

SPARK_HOME

/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive

/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive

opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive

HIVE_HOME

/opt/hive/apache-hive-2.1.1-bin

无需安装

无需安装

    

          说明:在此强调一下,这里的Sparkspark-1.6.3-bin-hadoop2.4-without-hive而不是spark-1.6.3-bin-hadoop2.4,否则无法成功。Hadoop的版本倒是无所谓,用2.x基本上都可以的,我这里用的是2.8.0

2  下载和解压缩各种包

            3台机器分别需要安装什么东西,上面的表格已经很明确,下载、解压缩、配置即可,这里不详细讲怎么安装,只列出下载地址。

       JDK的下载地址这里就不说了,Oracle这个流氓公司,还要求注册才能下载。

  

 Scala-2.11.8的下载地址:

https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz

        Hadoop-2.8.0下载地址:

http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.8.0/hadoop-2.8.0.tar.gz

spark-1.6.3-bin-hadoop2.4-without-hive下载地址是:

 http://mirror.bit.edu.cn/apache/spark/spark-1.6.3/spark-1.6.3-bin-hadoop2.4-without-hive.tgz

        hive-2.1.1的下载地址是:

http://mirror.bit.edu.cn/apache/hive/stable-2/apache-hive-2.1.1-bin.tar.gz

    

       JDK、SCALA、Hadoop、Spark、Hive的安装方法跟之前博文讲到的没什么不同,只是在Spark和Hive的配置上有一些不同,配置相关的东西,本博文下面会讲到,安装方法的话这里不细述了,有需要的可以参考下面列出的这些博文。


JDK安装参考(Ubuntu和CentOS都可以参考下面的博文):

http://blog.csdn.net/pucao_cug/article/details/68948639

        Hadoop安装参考:

http://blog.csdn.net/pucao_cug/article/details/71698903

       SCALA 和Spark的安装参考:

http://blog.csdn.net/pucao_cug/article/details/72353701

       Hive的安装参考:

http://blog.csdn.net/pucao_cug/article/details/71773665

    请分别按照上面提供的参考博文,将这几样东西都安装成功后,在参考下文提供的配置步骤来修改配置文件,然后运行Hive On  Spark。

3 配置环境变量

      编辑/etc/profile文件,编辑完成后执行source  /etc/profile命令。

      在master机器上添加:

export JAVA_HOME=/opt/java/jdk1.8.0_121
export SCALA_HOME=/opt/scala/scala-2.11.8
export HADOOP_HOME=/opt/hadoop/hadoop-2.8.0
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib"
export HIVE_HOME=/opt/hive/apache-hive-2.1.1-bin
export HIVE_CONF_DIR=${HIVE_HOME}/conf
export SPARK_HOME=/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive
export CLASSPATH=.:${JAVA_HOME}/lib:${SCALA_HOME}/lib:${HIVE_HOME}/lib:$CLASSPATH
export PATH=.:${JAVA_HOME}/bin:${SCALA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${SPARK_HOME}/bin:${HIVE_HOME}/bin:$PATH

     在slave机器上添加:

export JAVA_HOME=/opt/java/jdk1.8.0_121
export SCALA_HOME=/opt/scala/scala-2.11.8
export HADOOP_HOME=/opt/hadoop/hadoop-2.8.0
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib"
export SPARK_HOME=/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive
export CLASSPATH=.:${JAVA_HOME}/lib:${SCALA_HOME}/lib:${HIVE_HOME}/lib:$CLASSPATH
export PATH=.:${JAVA_HOME}/bin:${SCALA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${SPARK_HOME}/bin:$PATH

4 修改hostname文件

4.1 在3台机器上执行hostname命令

         分别编辑3太机器上的/etc/houstname文件,

        master机器上将该文件内容修改为master

如图:


          在slave1机器上修改为slave1:

如图:

     

在slave2机器上修改为slave2:

如图:

     

4.2 编辑hosts文件

       编辑/etc/hosts文件,3台机器的该文件中都添加如下配置:

192.168.27.141  master
192.168.27.142  slave1
192.168.27.143  slave2

5  Hadoop的安装和启动

        搭建Hive OnSpark环境,并且不需要对Hadoop做特殊配置,如果已经参考上面提到的博文将Hadoop安装并且启动成功了,该章节可以跳过,直接看第6章。

5.1 设置ssh免密码登录

      具体方法这里不细述了,如果有需要,请参考该博文的设置ssh免密码登录章节,博文是:

      http://blog.csdn.net/pucao_cug/article/details/71698903

5.2 创建一堆目录

    在master上执行命令创建目录的命令:

mkdir /root/hadoop
mkdir /root/hadoop/tmp
mkdir /root/hadoop/var
mkdir /root/hadoop/dfs
mkdir /root/hadoop/dfs/name
mkdir /root/hadoop/dfs/data

      在slave机器上执行创建目录的命令:

mkdir /root/hadoop
mkdir /root/hadoop/tmp
mkdir /root/hadoop/var
mkdir /root/hadoop/dfs
mkdir /root/hadoop/dfs/name
mkdir /root/hadoop/dfs/data

5.3  对conf目录下的文件做配置

        3台机器都一样,对/opt/hadoop/hadoop-2.8.0/etc/hadoop目录下的文件做如下配置。

5.3.1 修改core-site.xml

         在<configuration>节点内加入配置:

 <property>
       <name>hadoop.tmp.dir</name>
       <value>/root/hadoop/tmp</value>
  </property>
  <property>
       <name>fs.default.name</name>
       <value>hdfs://master:9000</value>
  </property>

5.3.2 修改hadoop-env.sh

         将

export   JAVA_HOME=${JAVA_HOME}

         修改为:        

 export  JAVA_HOME=/opt/java/jdk1.8.0_121

         说明:修改为自己的JDK路径

5.3.3 修改hdfs-site.xml

        在<configuration>节点内加入配置:            

<property>
  <name>dfs.name.dir</name>
  <value>/root/hadoop/dfs/name</value>
</property>
<property>
  <name>dfs.data.dir</name>
  <value>/root/hadoop/dfs/data</value>
</property>
<property>
  <name>dfs.replication</name>
  <value>2</value>
</property>
<property>
     <name>dfs.permissions</name>
     <value>false</value>
</property>

5.3.4  新建并且修改mapred-site.xml

       在该版本中,有一个名为mapred-site.xml.template的文件,复制该文件,然后改名为mapred-site.xml,命令是:

cp  /opt/hadoop/hadoop-2.8.0/etc/hadoop/mapred-site.xml.template     /opt/hadoop/hadoop-2.8.0/etc/hadoop/mapred-site.xml 

      修改这个新建的mapred-site.xml文件,在<configuration>节点内加入配置:

 <property>
   <name>mapred.job.tracker</name>
   <value>master:49001</value>
</property>
<property>
     <name>mapred.local.dir</name>
      <value>/root/hadoop/var</value>
</property>
<property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
</property>

5.3.5  修改slaves文件

    将里面的localhost删除,添加如下内容:

slave1
slave2

5.3.6  修改yarn-site.xml文件

      在<configuration>节点内加入配置(注意了,内存根据机器配置越大越好,我这里只配2个G是因为机器不行):

<property>
       <name>yarn.resourcemanager.hostname</name>
       <value>master</value>
</property>
 
<property>
       <name>yarn.resourcemanager.address</name>
       <value>${yarn.resourcemanager.hostname}:8032</value>
</property>
 
  <property>
       <name>yarn.resourcemanager.scheduler.address</name>
       <value>${yarn.resourcemanager.hostname}:8030</value>
  </property>
 
  <property>   
       <name>yarn.resourcemanager.webapp.address</name>
       <value>${yarn.resourcemanager.hostname}:8088</value>
  </property>
 
  <property>
       <name>yarn.resourcemanager.webapp.https.address</name>
       <value>${yarn.resourcemanager.hostname}:8090</value>
  </property>
 
  <property>
       <name>yarn.resourcemanager.resource-tracker.address</name>
       <value>${yarn.resourcemanager.hostname}:8031</value>
  </property>
 
  <property>
       <name>yarn.resourcemanager.admin.address</name>
       <value>${yarn.resourcemanager.hostname}:8033</value>
  </property>
 
  <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
  </property>
 
  <property>
       <name>yarn.scheduler.maximum-allocation-mb</name>
       <value>8182</value>    
  </property>
 
  <property>
       <name>yarn.nodemanager.vmem-pmem-ratio</name>
       <value>3.1</value>
  </property>
 
  <property>
       <name>yarn.nodemanager.resource.memory-mb</name>
       <value>2048</value>
   </property>
 
  <property>
       <name>yarn.nodemanager.vmem-check-enabled</name>
       <value>false</value>
   </property>

            说明:yarn.nodemanager.vmem-check-enabled 这个配置的意思是忽略虚拟内存的检查,如果你是安装在虚拟机上,这个配置很有用,配上去之后后续操作不容易出问题。如果是实体机上,并且内存够多,可以将这个配置去掉。

5.4  启动hadoop

          如果是第一次启动hadoop,在启动之前需要先进行初始化。因为master是namenode,所以只需要对master进行初始化操作,所谓初始化也就是对hdfs进行format。

        进入到master这台机器的/opt/hadoop/hadoop-2.8.0/bin目录,也就是执行命令:

cd  /opt/hadoop/hadoop-2.8.0/bin

          执行初始化脚本,也就是执行命令:

 ./hadoop  namenode  -format

如图:

   

完整输出:

[root@master bin]# ./hadoop  namenode -format
DEPRECATED: Use of this script to executehdfs command is deprecated.
Instead use the hdfs command for it.
 
17/05/26 14:25:07 INFO namenode.NameNode:STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   user = root
STARTUP_MSG:   host = master/192.168.27.141
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.8.0
STARTUP_MSG:   classpath =/opt/hadoop/hadoop-2.8.0/etc/hadoop:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/activation-1.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/apacheds-i18n-2.0.0-M15.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/apacheds-kerberos-codec-2.0.0-M15.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/api-asn1-api-1.0.0-M20.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/api-util-1.0.0-M20.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/asm-3.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/avro-1.7.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-beanutils-1.7.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-beanutils-core-1.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-cli-1.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-codec-1.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-collections-3.2.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-compress-1.4.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-configuration-1.6.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-digester-1.8.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-io-2.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-lang-2.6.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-logging-1.1.3.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-math3-3.1.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/commons-net-3.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/curator-client-2.7.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/curator-framework-2.7.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/curator-recipes-2.7.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/gson-2.2.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/guava-11.0.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/hadoop-annotations-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/hadoop-auth-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/hamcrest-core-1.3.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/htrace-core4-4.0.1-incubating.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/httpclient-4.5.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/httpcore-4.4.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jackson-core-asl-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jackson-jaxrs-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jackson-mapper-asl-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jackson-xc-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/java-xmlbuilder-0.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jaxb-api-2.2.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jaxb-impl-2.2.3-1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jcip-annotations-1.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jersey-core-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jersey-json-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jersey-server-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jets3t-0.9.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jettison-1.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jetty-6.1.26.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jetty-sslengine-6.1.26.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jetty-util-6.1.26.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jsch-0.1.51.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/json-smart-1.1.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jsp-api-2.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/jsr305-3.0.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/junit-4.11.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/log4j-1.2.17.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/mockito-all-1.8.5.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/netty-3.6.2.Final.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/nimbus-jose-jwt-3.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/paranamer-2.3.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/protobuf-java-2.5.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/servlet-api-2.5.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/slf4j-api-1.7.10.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/snappy-java-1.0.4.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/stax-api-1.0-2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/xmlenc-0.52.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/xz-1.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/zookeeper-3.4.6.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/hadoop-common-2.8.0-tests.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/hadoop-common-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/hadoop-nfs-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/asm-3.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/commons-cli-1.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/commons-codec-1.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/commons-daemon-1.0.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/commons-io-2.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/commons-lang-2.6.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/commons-logging-1.1.3.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/guava-11.0.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/hadoop-hdfs-client-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/htrace-core4-4.0.1-incubating.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/jackson-core-asl-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/jackson-mapper-asl-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/jersey-core-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/jersey-server-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/jetty-6.1.26.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/jetty-util-6.1.26.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/jsr305-3.0.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/leveldbjni-all-1.8.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/log4j-1.2.17.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/netty-3.6.2.Final.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/netty-all-4.0.23.Final.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/okhttp-2.4.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/okio-1.4.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/protobuf-java-2.5.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/servlet-api-2.5.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/xercesImpl-2.9.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/xml-apis-1.3.04.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/lib/xmlenc-0.52.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/hadoop-hdfs-2.8.0-tests.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/hadoop-hdfs-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/hadoop-hdfs-client-2.8.0-tests.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/hadoop-hdfs-client-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/hadoop-hdfs-native-client-2.8.0-tests.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/hadoop-hdfs-native-client-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/hdfs/hadoop-hdfs-nfs-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/activation-1.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/aopalliance-1.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/asm-3.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/commons-cli-1.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/commons-codec-1.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/commons-collections-3.2.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/commons-compress-1.4.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/commons-io-2.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/commons-lang-2.6.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/commons-logging-1.1.3.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/commons-math-2.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/curator-client-2.7.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/curator-test-2.7.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/fst-2.24.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/guava-11.0.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/guice-3.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/guice-servlet-3.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jackson-core-asl-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jackson-jaxrs-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jackson-mapper-asl-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jackson-xc-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/javassist-3.18.1-GA.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/javax.inject-1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jaxb-api-2.2.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jaxb-impl-2.2.3-1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jersey-client-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jersey-core-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jersey-guice-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jersey-json-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jersey-server-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jettison-1.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jetty-6.1.26.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jetty-util-6.1.26.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/jsr305-3.0.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/leveldbjni-all-1.8.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/log4j-1.2.17.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/netty-3.6.2.Final.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/objenesis-2.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/protobuf-java-2.5.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/servlet-api-2.5.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/stax-api-1.0-2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/xz-1.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/zookeeper-3.4.6-tests.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/lib/zookeeper-3.4.6.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-api-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-applications-distributedshell-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-applications-unmanaged-am-launcher-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-client-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-common-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-registry-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-server-applicationhistoryservice-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-server-common-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-server-nodemanager-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-server-resourcemanager-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-server-sharedcachemanager-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-server-tests-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-server-timeline-pluginstorage-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/yarn/hadoop-yarn-server-web-proxy-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/aopalliance-1.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/asm-3.2.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/avro-1.7.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/commons-compress-1.4.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/commons-io-2.4.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/guice-3.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/guice-servlet-3.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/hadoop-annotations-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/hamcrest-core-1.3.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/jackson-core-asl-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/jackson-mapper-asl-1.9.13.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/javax.inject-1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/jersey-core-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/jersey-guice-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/jersey-server-1.9.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/junit-4.11.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/leveldbjni-all-1.8.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/log4j-1.2.17.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/netty-3.6.2.Final.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/paranamer-2.3.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/protobuf-java-2.5.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/snappy-java-1.0.4.1.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/lib/xz-1.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/hadoop-mapreduce-client-app-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/hadoop-mapreduce-client-common-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/hadoop-mapreduce-client-hs-plugins-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.8.0-tests.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/hadoop-mapreduce-client-shuffle-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.0.jar:/opt/hadoop/hadoop-2.8.0/contrib/capacity-scheduler/*.jar:/opt/hadoop/hadoop-2.8.0/contrib/capacity-scheduler/*.jar
STARTUP_MSG:   build =https://git-wip-us.apache.org/repos/asf/hadoop.git -r91f2b7a13d1e97be65db92ddabc627cc29ac0009; compiled by 'jdu' on2017-03-17T04:12Z
STARTUP_MSG:   java = 1.8.0_121
************************************************************/
17/05/26 14:25:07 INFO namenode.NameNode:registered UNIX signal handlers for [TERM, HUP, INT]
17/05/26 14:25:07 INFO namenode.NameNode:createNameNode [-format]
17/05/26 14:25:08 WARNutil.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable
17/05/26 14:25:08 WARN common.Util: Path/root/hadoop/dfs/name should be specified as a URI in configuration files.Please update hdfs configuration.
17/05/26 14:25:08 WARN common.Util: Path/root/hadoop/dfs/name should be specified as a URI in configuration files.Please update hdfs configuration.
Formatting using clusterid:CID-dfd9af16-7746-405f-9c99-1750e7e80df8
17/05/26 14:25:08 INFO namenode.FSEditLog:Edit logging is async:false
17/05/26 14:25:08 INFOnamenode.FSNamesystem: KeyProvider: null
17/05/26 14:25:08 INFOnamenode.FSNamesystem: fsLock is fair: true
17/05/26 14:25:08 INFOnamenode.FSNamesystem: Detailed lock hold time metrics enabled: false
17/05/26 14:25:09 INFO blockmanagement.DatanodeManager:dfs.block.invalidate.limit=1000
17/05/26 14:25:09 INFOblockmanagement.DatanodeManager:dfs.namenode.datanode.registration.ip-hostname-check=true
17/05/26 14:25:09 INFOblockmanagement.BlockManager: dfs.namenode.startup.delay.block.deletion.sec isset to 000:00:00:00.000
17/05/26 14:25:09 INFOblockmanagement.BlockManager: The block deletion will start around 2017 May 2614:25:09
17/05/26 14:25:09 INFO util.GSet: Computingcapacity for map BlocksMap
17/05/26 14:25:09 INFO util.GSet: VMtype       = 64-bit
17/05/26 14:25:09 INFO util.GSet: 2.0% maxmemory 889 MB = 17.8 MB
17/05/26 14:25:09 INFO util.GSet:capacity      = 2^21 = 2097152 entries
17/05/26 14:25:09 INFOblockmanagement.BlockManager: dfs.block.access.token.enable=false
17/05/26 14:25:09 INFOblockmanagement.BlockManager: defaultReplication         = 2
17/05/26 14:25:09 INFOblockmanagement.BlockManager: maxReplication             = 512
17/05/26 14:25:09 INFOblockmanagement.BlockManager: minReplication             = 1
17/05/26 14:25:09 INFOblockmanagement.BlockManager: maxReplicationStreams      = 2
17/05/26 14:25:09 INFOblockmanagement.BlockManager: replicationRecheckInterval = 3000
17/05/26 14:25:09 INFOblockmanagement.BlockManager: encryptDataTransfer        = false
17/05/26 14:25:09 INFOblockmanagement.BlockManager: maxNumBlocksToLog          = 1000
17/05/26 14:25:09 INFOnamenode.FSNamesystem: fsOwner            = root (auth:SIMPLE)
17/05/26 14:25:09 INFOnamenode.FSNamesystem: supergroup         = supergroup
17/05/26 14:25:09 INFOnamenode.FSNamesystem: isPermissionEnabled = false
17/05/26 14:25:09 INFOnamenode.FSNamesystem: HA Enabled: false
17/05/26 14:25:09 INFOnamenode.FSNamesystem: Append Enabled: true
17/05/26 14:25:09 INFO util.GSet: Computingcapacity for map INodeMap
17/05/26 14:25:09 INFO util.GSet: VMtype       = 64-bit
17/05/26 14:25:09 INFO util.GSet: 1.0% maxmemory 889 MB = 8.9 MB
17/05/26 14:25:09 INFO util.GSet:capacity      = 2^20 = 1048576 entries
17/05/26 14:25:09 INFOnamenode.FSDirectory: ACLs enabled? false
17/05/26 14:25:09 INFOnamenode.FSDirectory: XAttrs enabled? true
17/05/26 14:25:09 INFO namenode.NameNode:Caching file names occurring more than 10 times
17/05/26 14:25:09 INFO util.GSet: Computingcapacity for map cachedBlocks
17/05/26 14:25:09 INFO util.GSet: VMtype       = 64-bit
17/05/26 14:25:09 INFO util.GSet: 0.25% maxmemory 889 MB = 2.2 MB
17/05/26 14:25:09 INFO util.GSet:capacity      = 2^18 = 262144 entries
17/05/26 14:25:09 INFO namenode.FSNamesystem:dfs.namenode.safemode.threshold-pct = 0.9990000128746033
17/05/26 14:25:09 INFOnamenode.FSNamesystem: dfs.namenode.safemode.min.datanodes = 0
17/05/26 14:25:09 INFOnamenode.FSNamesystem: dfs.namenode.safemode.extension     = 30000
17/05/26 14:25:09 INFO metrics.TopMetrics:NNTop conf: dfs.namenode.top.window.num.buckets = 10
17/05/26 14:25:09 INFO metrics.TopMetrics:NNTop conf: dfs.namenode.top.num.users = 10
17/05/26 14:25:09 INFO metrics.TopMetrics:NNTop conf: dfs.namenode.top.windows.minutes = 1,5,25
17/05/26 14:25:09 INFOnamenode.FSNamesystem: Retry cache on namenode is enabled
17/05/26 14:25:09 INFOnamenode.FSNamesystem: Retry cache will use 0.03 of total heap and retry cacheentry expiry time is 600000 millis
17/05/26 14:25:09 INFO util.GSet: Computingcapacity for map NameNodeRetryCache
17/05/26 14:25:09 INFO util.GSet: VMtype       = 64-bit
17/05/26 14:25:09 INFO util.GSet:0.029999999329447746% max memory 889 MB = 273.1 KB
17/05/26 14:25:09 INFO util.GSet:capacity      = 2^15 = 32768 entries
17/05/26 14:25:09 INFO namenode.FSImage:Allocated new BlockPoolId: BP-344149450-192.168.27.141-1495779909753
17/05/26 14:25:09 INFO common.Storage:Storage directory /root/hadoop/dfs/name has been successfully formatted.
17/05/26 14:25:10 INFOnamenode.FSImageFormatProtobuf: Saving image file/root/hadoop/dfs/name/current/fsimage.ckpt_0000000000000000000 using nocompression
17/05/26 14:25:10 INFOnamenode.FSImageFormatProtobuf: Image file/root/hadoop/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 321bytes saved in 0 seconds.
17/05/26 14:25:10 INFOnamenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
17/05/26 14:25:10 INFO util.ExitUtil:Exiting with status 0
17/05/26 14:25:10 INFO namenode.NameNode:SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode atmaster/192.168.27.141
************************************************************/
[root@master bin]#

          说明:初始化只需要进行一次即可,后面再启动并不需要执行初始化。

              上面初始化完成了,直接进入sbin目录:

cd  /opt/hadoop/hadoop-2.8.0/sbin

         执行启动命令:

./start-all.sh

     如图:

     

     完整的输出信息是:

 [root@masterbin]# cd  /opt/hadoop/hadoop-2.8.0/sbin
[root@master sbin]# ./start-all.sh
This script is Deprecated. Instead usestart-dfs.sh and start-yarn.sh
17/05/26 14:27:00 WARNutil.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable
Starting namenodes on [master]
master: starting namenode, logging to/opt/hadoop/hadoop-2.8.0/logs/hadoop-root-namenode-master.out
slave1: starting datanode, logging to/opt/hadoop/hadoop-2.8.0/logs/hadoop-root-datanode-slave1.out
slave2: starting datanode, logging to/opt/hadoop/hadoop-2.8.0/logs/hadoop-root-datanode-slave2.out
Starting secondary namenodes [0.0.0.0]
0.0.0.0: starting secondarynamenode,logging to/opt/hadoop/hadoop-2.8.0/logs/hadoop-root-secondarynamenode-master.out
17/05/26 14:27:25 WARNutil.NativeCodeLoader: Unable to load native-hadoop library for yourplatform... using builtin-java classes where applicable
starting yarn daemons
starting resourcemanager, logging to/opt/hadoop/hadoop-2.8.0/logs/yarn-root-resourcemanager-master.out
slave1: starting nodemanager, logging to/opt/hadoop/hadoop-2.8.0/logs/yarn-root-nodemanager-slave1.out
slave2: starting nodemanager, logging to/opt/hadoop/hadoop-2.8.0/logs/yarn-root-nodemanager-slave2.out
[root@master sbin]#

       开放50070端口,或者直接关闭防火墙。CentOS7防火墙相关的操作请参考给博文:

http://blog.csdn.net/pucao_cug/article/details/72453382


     访问下面的地址看,看是否启动成功:

http://master:50070

      如图:

   

      还可以访问这个地址:http://master:50090

     如图:

     

      或者这个地址:http://master:8088

     如图:

    

6  Spark 的安装和启动

        在Hive OnSpark的环境中,Spark的配置要做一些修改,本章会讲到这些配置内容。

6.1  对conf目录下的文件做配置

        对3台机器的/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/conf的一系列文件做配置。

6.1.1  新建spark-env.h文件

       执行命令,进入到/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/conf目录内:

cd   /opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/conf

       以spark为我们创建好的模板创建一个spark-env.h文件,命令是:

cp   spark-env.sh.template   spark-env.sh

      编辑spark-env.h文件,在里面加入配置(具体路径以自己的为准)

export SCALA_HOME=/opt/scala/scala-2.11.8
export JAVA_HOME=/opt/java/jdk1.8.0_121
export HADOOP_HOME=/opt/hadoop/hadoop-2.8.0
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop 
export SPARK_HOME=/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive
export SPARK_MASTER_IP=master
export SPARK_EXECUTOR_MEMORY=512M

6.1.2 新建slaves文件

       以spark为我们创建好的模板创建一个slaves文件,命令是:

cp   spark-defaults.conf.template   spark-defaults.conf

     编辑slaves文件,里面的内容为:

slave1
slave2

6.1.3  新建spark-defaults.conf文件

      以spark为我们创建好的模板创建一个slaves文件,命令是:

cp   spark-defaults.conf.template   spark-defaults.conf

      编辑spark-defaults.conf文件,在里面新增配置:

spark.master                     spark://master:7077
spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://master:9000/directory
spark.serializer                  org.apache.spark.serializer.KryoSerializer
spark.driver.memory              700M
spark.executor.extraJavaOptions  -XX:+PrintGCDetails -Dkey=value-Dnumbers="one two three"

6.2 在HDFS上创建目录

        因为上面的配置中让spark将eventLog存到HDFS的directory目录下,所以需要执行hadoop命令,在HDFS上创建directory目录,创建目录命令是:

$HADOOP_HOME/bin/hadoop   fs  -mkdir  -p   /directory

        授权命令是:

$HADOOP_HOME/bin/hadoop   fs  -chmod  777  /directory

        如图:

     

6.3  启动spark

      进入sbin目录,也就是执行下面的命令:

cd  /opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/sbin

       执行启动脚本:

 ./start-all.sh

如图:

   

完整的输出是:

[root@mastersbin]# cd /opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/sbin
[root@master sbin]#  cd /opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/sbin
[root@master sbin]#  ./start-all.sh
starting org.apache.spark.deploy.master.Master,logging to/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/logs/spark-root-org.apache.spark.deploy.master.Master-1-master.out
slave1: startingorg.apache.spark.deploy.worker.Worker, logging to /opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave1.out
slave2: startingorg.apache.spark.deploy.worker.Worker, logging to/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-slave2.out
[root@master sbin]#

访问这个地址看是否启动成功:

http://master:8080

如图:



7  Hive的配置和启动

             对于Hive安装不熟悉的可以参考该博文:

http://blog.csdn.net/pucao_cug/article/details/71773665

          不过需要强调的是,那篇博文中没有搭建 Hive On Spark环境,所以那篇博文只是用于对安装Hive做参考,如果要搭建Hive On  Spark本章节后面的配置不能略过,必须认真看。

7.1 执行命令创建HDFS目录

         hive的文件存储在hadoop提供的HDFS分布式文件系统里,需要调用hadoop命令,在hdfs上创建几个目录。

       执行创建命令:

$HADOOP_HOME/bin/hadoop   fs   -mkdir  -p   /user/hive/warehouse

         给刚才新建的目录赋予读写权限,执行命令:

$HADOOP_HOME/bin/hadoop  fs   -chmod   777   /user/hive/warehouse 

      执行创建命令:

$HADOOP_HOME/bin/hadoop   fs   -mkdir -p   /tmp/hive

      执行授权命令:

$HADOOP_HOME/bin/hadoop  fs   -chmod  777   /tmp/hive

      如图:

    

7.2 对conf目录下的配置文件进行配置

        对/opt/hive/apache-hive-2.1.1-bin/conf目录下的一系列文件做配置,这些配置很关键。

7.2.1  新建hive-env.sh文件并进行修改

      进入到/opt/hive/apache-hive-2.1.1-bin/conf目录,命令是:

cd   /opt/hive/apache-hive-2.1.1-bin/conf

       将hive-env.sh.template文件复制一份,并且改名为hive-env.sh,命令是:

cp    hive-env.sh.template    hive-env.sh

       打开hive-env.sh配置并且添加以下内容:

export  HADOOP_HOME=/opt/hadoop/hadoop-2.8.0
export  HIVE_CONF_DIR=/opt/hive/apache-hive-2.1.1-bin/conf
export  HIVE_AUX_JARS_PATH=/opt/hive/apache-hive-2.1.1-bin/lib

7.2.2 对hive-site.xml文件进行配置

          首先要创建hive-site.xml文件

      进入到/opt/hive/apache-hive-2.1.1-bin/conf目录,命令是:

cd  /opt/hive/apache-hive-2.1.1-bin/conf

       将hive-default.xml.template文件复制一份,并且改名为hive-site.xml,命令是:

cp  hive-default.xml.template  hive-site.xml

7.2.2.1 目录相关的配置

      首先在master机器上上创建临时目录/opt/hive/tmp

     将hive-site.xml文件中的所有${system:java.io.tmpdir}替换为/opt/hive/tmp

     将hive-site.xml文件中的所有${system:user.name}都替换为root

7.2.2.2  MySQL数据库相关的配置

搜索javax.jdo.option.ConnectionURL,将该name对应的value修改为MySQL的地址,例如我修改后是:

    <name>javax.jdo.option.ConnectionURL</name> 
    <value>jdbc:mysql://192.168.27.138:3306/hive?createDatabaseIfNotExist=true</value>

搜索javax.jdo.option.ConnectionDriverName,将该name对应的value修改为MySQL驱动类路径:

  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>

搜索javax.jdo.option.ConnectionUserName,将对应的value修改为MySQL数据库登录名:

   <name>javax.jdo.option.ConnectionUserName</name>
   <value>root</value>

搜索javax.jdo.option.ConnectionPassword,将对应的value修改为MySQL数据库的登录密码:

<name>javax.jdo.option.ConnectionPassword</name>
<value>cj</value>

搜索hive.metastore.schema.verification,将对应的value修改为false:

    <name>hive.metastore.schema.verification</name>
    <value>false</value>

7.2.2.3 其他配置

搜索hive.execution.engine,将对应的value修改为spark:

  <name>hive.execution.engine</name>
  <value>spark</value>

在末尾新增配置:

  

     <property>
                   <name>hive.enable.spark.execution.engine</name>
                   <value>true</value>
   </property>
  
    <property>
                   <name>spark.home</name>
                   <value>/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive</value>
   </property>
  
     <property>
                   <name>spark.master</name>
                   <value>spark://master:7077</value>
   </property>
  
   <property>
                   <name>spark.submit.deployMode</name>
                   <value>client</value>
   </property>
  
    <property>
                   <name>spark.serializer</name>
                   <value>org.apache.spark.serializer.KryoSerializer</value>
   </property>
  
    <property>
          <name>spark.eventLog.enabled</name>
          <value>true</value>
     </property>
        
       <property>
          <name>spark.eventLog.dir</name>
          <value>hdfs://master:9000/directory</value>
       </property>
        
    <property>
          <name>spark.executor.memory</name>
          <value>512m</value>
     </property>

7.3 将MySQL驱动包上载到lib目录

        MySQL驱动包上载到Hivelib目录下,例如我是上载到/opt/hive/apache-hive-2.1.1-bin/lib目录下。

如图:

    

7.4 将Spark下的某些jar包拷贝到hive目录下

         在master 机器上,将/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/lib目录下的spark-assembly-1.6.3-hadoop2.4.0.jar包拷贝到/opt/hive/apache-hive-2.1.1-bin/lib目录下。

如图:

     

7.5  对hive所要连接的数据库做初始化

      进入到hivebin目录执行命令:

cd  /opt/hive/apache-hive-2.1.1-bin/bin

     对数据库进行初始化,执行命令:

  schematool  -initSchema  -dbType  mysql

      如图:

    

    完整输出是:

[root@mastersbin]# cd  /opt/hive/apache-hive-2.1.1-bin/bin
[root@master bin]# schematool   -initSchema -dbType  mysql
which: no hbase in(.:/opt/java/jdk1.8.0_121/bin:/opt/hadoop/hadoop-2.8.0/bin:/opt/hadoop/hadoop-2.8.0/sbin:/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/bin:/opt/zookeeper/zookeeper-3.4.10/bin:/opt/hive/apache-hive-2.1.1-bin/bin:/opt/maven/apache-maven-3.3.9/bin:/opt/scala/scala-2.11.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
SLF4J: Class path contains multiple SLF4Jbindings.
SLF4J: Found binding in[jar:file:/opt/hive/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in[jar:file:/opt/hive/apache-hive-2.1.1-bin/lib/spark-assembly-1.6.3-hadoop2.4.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in[jar:file:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Seehttp://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type[org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:       jdbc:mysql://192.168.27.138:3306/hive?createDatabaseIfNotExist=true
Metastore Connection Driver :    com.mysql.jdbc.Driver
Metastore connection User:       root
Starting metastore schema initialization to2.1.0
Initialization scripthive-schema-2.1.0.mysql.sql
Initialization script completed
schemaTool completed
[root@master bin]#

7.6  启动hive命令行窗口

     现在打开到hive的bin目录中,打开命令是:

cd   /opt/hive/apache-hive-2.1.1-bin/bin

      执行hive脚本,也就是执行命令:

./hive

如图:

   

完整输出是:

[root@mastersbin]# cd  /opt/hive/apache-hive-2.1.1-bin/bin
[root@master bin]# schematool   -initSchema -dbType  mysql
which: no hbase in(.:/opt/java/jdk1.8.0_121/bin:/opt/hadoop/hadoop-2.8.0/bin:/opt/hadoop/hadoop-2.8.0/sbin:/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/bin:/opt/zookeeper/zookeeper-3.4.10/bin:/opt/hive/apache-hive-2.1.1-bin/bin:/opt/maven/apache-maven-3.3.9/bin:/opt/scala/scala-2.11.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
SLF4J: Class path contains multiple SLF4Jbindings.
SLF4J: Found binding in[jar:file:/opt/hive/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in[jar:file:/opt/hive/apache-hive-2.1.1-bin/lib/spark-assembly-1.6.3-hadoop2.4.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in[jar:file:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Seehttp://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type[org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:        jdbc:mysql://192.168.27.138:3306/hive?createDatabaseIfNotExist=true
Metastore Connection Driver :    com.mysql.jdbc.Driver
Metastore connection User:       root
Starting metastore schema initialization to2.1.0
Initialization scripthive-schema-2.1.0.mysql.sql
Initialization script completed
schemaTool completed
[root@master bin]# cd   /opt/hive/apache-hive-2.1.1-bin/bin
[root@master bin]# ./hive
which: no hbase in(.:/opt/java/jdk1.8.0_121/bin:/opt/hadoop/hadoop-2.8.0/bin:/opt/hadoop/hadoop-2.8.0/sbin:/opt/spark/spark-1.6.3-bin-hadoop2.4-without-hive/bin:/opt/zookeeper/zookeeper-3.4.10/bin:/opt/hive/apache-hive-2.1.1-bin/bin:/opt/maven/apache-maven-3.3.9/bin:/opt/scala/scala-2.11.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
SLF4J: Class path contains multiple SLF4Jbindings.
SLF4J: Found binding in[jar:file:/opt/hive/apache-hive-2.1.1-bin/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in[jar:file:/opt/hive/apache-hive-2.1.1-bin/lib/spark-assembly-1.6.3-hadoop2.4.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in[jar:file:/opt/hadoop/hadoop-2.8.0/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindingsfor an explanation.
SLF4J: Actual binding is of type[org.apache.logging.slf4j.Log4jLoggerFactory]
 
Logging initialized using configuration infile:/opt/hive/apache-hive-2.1.1-bin/conf/hive-log4j2.properties Async: true
hive>

7.7  在hive中创建数据表

在hive命令行中执行hive命令,创建表:

create table t_hello(id int, name string)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;

     如图:

 

       表已经有了,往表里加点数据吧,首先在/opt/hive目录下创建一个hello.txt文件,往文件里添加点数据

如图:

    

 

         在hive命令行中执行hive命令,将hello.txt中的内容加载到t_hello表中,命令是:

load data local inpath'/opt/hive/hello.txt' into table t_hello;

如图:

    

执行查询命令,看看t_hello表里的内容:

select * from  t_hello;

如图:

   

8 对Hive On Spark环境做测试

8.1 执行select  count命令进行测试

      是否能顺利执行selectcount命令,才是我们Hive  On  Spark环境是否搭建成功的标志。

    接着7.7章节的命令行窗口继续执行select  count命令:

select  count(*)  from  t_hello;

如图:

   

完整的输出信息是:

hive> create table t_hello(id int, namestring) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE;
OK
Time taken: 2.332 seconds
hive> load data local inpath '/opt/hive/hello.txt' into table t_hello;
Loading data to table default.t_hello
OK
Time taken: 2.587 seconds
hive> select * from t_hello;
OK
1      zs
2      ls
Time taken: 1.917 seconds, Fetched: 2row(s)
hive> select count(*) from t_hello;
Query ID =root_20170526151457_6e319edf-b3e8-4274-9a02-736306cb00d6
Total jobs = 1
Launching Job 1 out of 1
In order to change the average load for areducer (in bytes):
  sethive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number ofreducers:
  sethive.exec.reducers.max=<number>
In order to set a constant number ofreducers:
  setmapreduce.job.reduces=<number>
Starting Spark Job =52a77fdf-22a7-45aa-b02d-2f9c764de424
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = SENT
state = STARTED
state = STARTED
state = STARTED
state = STARTED
state = STARTED
state = STARTED
state = STARTED
state = STARTED
state = STARTED
state = STARTED
state = STARTED
 
Query Hive on Spark job[0] stages:
0
1
 
Status: Running (Hive on Spark job[0])
Job Progress Format
CurrentTime StageId_StageAttemptId:SucceededTasksCount(+RunningTasksCount-FailedTasksCount)/TotalTasksCount[StageCost]
2017-05-26 15:15:33,439 Stage-0_0: 0/1  Stage-1_0: 0/1
state = STARTED
2017-05-26 15:15:34,470 Stage-0_0:0(+1)/1      Stage-1_0: 0/1
state = STARTED
state = STARTED
state = STARTED
2017-05-26 15:15:37,533 Stage-0_0:0(+1)/1      Stage-1_0: 0/1
state = STARTED
state = STARTED
state = STARTED
2017-05-26 15:15:40,643 Stage-0_0:0(+1)/1      Stage-1_0: 0/1
state = STARTED
state = STARTED
state = STARTED
2017-05-26 15:15:43,779 Stage-0_0: 0(+1)/1      Stage-1_0: 0/1
state = STARTED
state = STARTED
state = STARTED
2017-05-26 15:15:46,904 Stage-0_0:0(+1)/1      Stage-1_0: 0/1
state = STARTED
state = STARTED
state = STARTED
2017-05-26 15:15:50,098 Stage-0_0:0(+1)/1      Stage-1_0: 0/1
state = STARTED
state = STARTED
state = STARTED
2017-05-26 15:15:53,150 Stage-0_0:0(+1)/1      Stage-1_0: 0/1
state = STARTED
state = STARTED
state = STARTED
2017-05-26 15:15:56,187 Stage-0_0:0(+1)/1      Stage-1_0: 0/1
state = STARTED
state = STARTED
state = STARTED
2017-05-26 15:15:59,361 Stage-0_0:0(+1)/1      Stage-1_0: 0/1
state = STARTED
state = STARTED
state = STARTED
2017-05-26 15:16:02,515 Stage-0_0:0(+1)/1      Stage-1_0: 0/1
state = STARTED
state = STARTED
2017-05-26 15:16:04,559 Stage-0_0: 1/1 FinishedStage-1_0: 0(+1)/1
state = STARTED
state = SUCCEEDED
2017-05-26 15:16:06,598 Stage-0_0: 1/1Finished Stage-1_0: 1/1 Finished
Status: Finished successfully in 60.76seconds
OK
2
Time taken: 69.023 seconds, Fetched: 1row(s)
hive>

          说明:在数据很少的时候并不能体现Hive on Spark的优势,但是数据很多的时候就会比较明显了。能够正常执行select  cout命令,证明我们的Hive On Spark环境搭建成功了。

8.2 在浏览器里访问spark的UI界面

        如果Hive On Spark运行成功,可以在spark的UI界面上查看,我们是否在Hive中成功调用了Spark集群来执行任务。访问下面的地址:http://master:8080/

     如图:

    

2018-05-13 16:06:55 hexinghua0126 阅读数 1264
  • Spark开发工程师(含项目)

    本课程为大数据金融信贷项目实战课,着重讲解企业中常用的大数据技术理论与实战,如Hadoop、Hive、HBase、Sqoop、Flume、Kafka、Spark Streaming、Spark SQL、Spark Structured Streaming等。课程包含离线项目和实时项目,从项目业务需求、技术选型、架构设计、集群安装部署、集成开发以及项目可视化进行全方位实战讲解。

    2187 人正在学习 去看看 杨俊

SPARK ON HIVE:让spark sql通过sql的方式去读取hive当中的数据

HIVE ON SPARK:让hive的计算引擎由MapReduce改为SPARK

1、  先按官网的参考代码,构建

val conf = new SparkConf().setMaster("local[*]").setAppName("hotCount")

val sc = new SparkContext(conf)

    //创建hive的实例

val hiveContext = new HiveContext(sc)

hiveContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")

hiveContext.sql("LOAD DATA LOCAL INPATH 'E:/hive.txt' INTO TABLE src")

// Queries are expressed in HiveQL

hiveContext.sql("FROM src SELECT key, value").collect().foreach(println)

出现:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.createDirectoryWithMode0(Ljava/lang/String;I)V

我们之后在windows当中配置的hadoop版本是从apache下载,但是我们现在所使用的hadoop版本是cdh的。所以出现的版本不一致的问题。

1、  需要去下载一个cdh版本的hadoop

进入网站:http://archive.cloudera.com/cdh5/cdh/5/

配置HADOOP_HOME的环境变量

   将插件中的

   中的hadoop.dll文件 复制到C:/windows/system32目录下

   在插件中的其它文件,复制到hadoop目录的/bin目录下。

注意:有可能是插件问题


现在可以保证,HiveContext可以操作相应的SQL。

但是该SQL操作的内容是来自于windows本地,没有与hive表进行连接。

   2、让HiveContext与hive进行连接,出现下面样式,表示配置已经成功

        将hive-site.xml、hdfs-site.xml、core-site.xml文件加入resource目录

        需要在cdh的版本下,去找到hive的配置文件

2.1:find / -name ‘hive-site.xml’发现有多个配置文件,建议使用/etc/目录下的文件

2.2:在Idea项目去创建一个resource目录


2.3将配置文件复制到resource目录下

注意:在sparksql去连接是通过主机名去访问的,要让本地的hosts的ip与主机名对应。

  连接成功了。但是看不到相应的数据

     在hive当中去创建了一个很简单的表,通过spark sql去测试,发现是可以正常读取出来的。

     查询不到结果与表结构有关。

     flume到hive的表需要要求:分桶与orc格式。

     在spark 1.6以及之前不支持。

     在spark 2.*当中是可以通过spark sql来操作的。

将原始表中的数据,转换成我们计算的单元【根据需求来确定】


Ambari Spark 集成Hive

阅读数 236

没有更多推荐了,返回首页