赞
踩
Hive 是基于Hadoop的一个数据仓库工具,它使用MapReduce计算框架(Hive在未来版本中将逐渐抛弃ManReduce,并转移到Spark等计算框架上)实现了常用SOL语句,关对外提供类SQL编程接口。MapReduce编程技术学习成本较高,应用较为复杂,业界人员又大多习惯使用SQL语言来处理数据。在这种情况下,Hive的出现降低了Hadoop的使用门槛,减少了开发MapReduce程序的时间成本,为用户、开发人员和科研人员提供了极大的方便。
在Hadoop生态系统中,HDFS用于存储数据,Yarn用于资源管理,MapReduce用于数据处理,而Hive是构建在Hadoop之上的数据仓库,包括以下方面:
使用HQL作为查询接口;
使用HDFS存储;
使用MapReduce或其它计算框架计算;
执行程序运行在Yarn上。
Hive的本质是:将Hive SQL转化成MapReduce程序,其灵活性和扩展性比较好,支持UDF,自定义存储格式等;适合离线数据处理。
特点
简单、容易上手 (提供了类似 sql 的查询语言 hql),使得精通 sql 但是不了解 Java 编程的人也能很好地进行大数据分析;
灵活性高,可以自定义用户函数 (UDF) 和存储格式;
为超大的数据集设计的计算和存储能力,集群扩展容易;
统一的元数据管理,可与 presto/impala/sparksql 等共享数据;
执行延迟高,不适合做数据的实时处理,但适合做海量数据的离线处理。
系统结构图
搭建环境所需要的:
两台主机:master和slave1
必要文件:apache-hive-2.1.1-bin.tar和mysql-connector-java-5.1.42-bin.jar包
这两个文件我放在文章开头了,如果没有可以下载
mysql数据库
以下搭建的步骤十分繁琐,我会尽量写的详细一些,请跟着教程一步一步来
开机后,不要先启动Hadoop服务,先进行下面的步骤 :
- # 以下是三条指令
-
- sudo mkdir bigdata
-
- sudo mv /home/qyf/Desktop/apache-hive-2.1.1-bin.tar /bigdata # 按照自己的目录来
-
- sudo tar -xvf /bigdata/apache-hive-2.1.1-bin.tar
-
- # 注意复制的时候不要把注释复制过去
- sudo chmod -R 777 ./bigdata
- sudo chmod -R 777 ./bigdata/apache-hive-2.1.1-bin
- mv apache-hive-2.1.1-bin hive # 要在bigdata文件夹下执行
sudo vi /etc/profile
将下面两行填入其中
- export HIVE_HOME=/bigdata/hive
- export PATH=$PATH:$HIVE_HOME/bin
使配置生效
source /etc/profile
从上到下依次执行下面的命令
- wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
- sudo yum -y install mysql57-community-release-el7-11.noarch.rpm
- sudo yum -y install mysql-server
- # 如果执行上面一行指令发生报错,则执行下面的语句,然后再执行上面的命令
- sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
启动mysql
- systemctl start mysqld.service
- systemctl status mysqld.service
设置mysql登录密码
cat /var/log/mysqld.log | grep password
执行上面的命令会生成一个临时密码,登录时输入该密码即可登录
登录mysql
mysql -u root -p
进入mysql第一件事就是要修改密码,毕竟这个密码太逆天了,谁也记不住
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '此处填写你的密码';
注意mysql的密码要求是必须存在大写字母、小写字母、数字、字符,你的密码符合这个要求即可,一定要记住这个密码,以后登录mysql都要使用
从上到下依次执行以下指令
- mysql> create database hive; # 建立数据库,命名为hive
- mysql> create user hive # 这个hive是用户名,复制时记得把注释去掉 IDENTIFIED by '此处为用户名为hive的mysql密码'; # 注意这个引号不能去掉,课本上是这个,但更推荐执行下面一行的代码来代替它
- mysql> GRANT SELECT ON *.* TO '用户名 # 这里推荐写hive '@'主机名' IDENTIFIED BY '密码';
- mysql> grant all privileges on hive.* to hive@'%' identified by '此处为用户名为hive的mysql密码'; # 这个也是
- mysql> flush privileges;
sudo vi /usr/hadoop/etc/hadoop/hdfs-site.xml
在里面输入以下内容
- <property>
- <name>dfs.namenode.fs-limits.min-block-size</name>
- <value>0</value>
- </property>
进入slave1主机,进行同样的操作。操作完毕后,返回master主机
在master主机执行下面的命令
hadoop namenode - format
启动服务
start-all.sh
查看服务个数
jps
如果输出以下四个节点,则格式化成功
如果没有NameNode或者节点个数很少,请执行下面的操作(如果节点足够请直接跳到下一步)
①两台主机master和slave1都要打开/usr/hadoop/tmp/dfs文件夹
sudo cd /usr/hadoop/tmp/dfs
②两台主机master和slave1都要删除dfs文件夹里面的所有文件
rm -r 文件夹名字
③返回master主机再次格式化并且启动集群
由上至下执行以下命令,创建HDFS目录并给予权限
- hadoop fs -mkdir -p /tmp/hive
- hadoop fs -mkdir -p /hive/warehouse
- hadoop fs -chmod -R 777 /tmp/hive
- hadoop fs -chmod -R 777 /hive/warehouse
进入文件夹/bigdata/hive/conf
sudo cd /bigdata/hive/conf
复制default.xml.template文件并改名为hive-site.xml
sudo cp hive-default.xml.template hive-site.xml
进入该文件
sudo vi hive-site.xml
!!!前方高能,请一定不要写错,否则hive会启动失败!!
观察hive-site.xml文件,发现每一组<property>里都有<name>和<value>选项
我们把<name>成为"名称",把<value>称为"值",请大家根据下面这张表,修改每一个<name>的<value>
例如,对于第一个名称hive.exec.local.scratchdir,在非编辑模式下按“ / ”键,可以寻找文件中的关键字:
然后将<value>改为上表中的即可,注意上表中的所有<value>都要修改,并且不能差一个字母,必须和上表一样
和上一步一样,根据下面这张表修改hive-site.xml文件的内容
注意:
Ⅰ.第一行名为java.jdo.option.ConnectionURL的项,它的值修改为下面的内容
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false</value>
Ⅱ.第三行mysql用户名如果按照前面的步骤来应该是hive,则不用修改,如果是自己起的其它的名字,需要改为自己的用户名
Ⅲ.第四行mysql用户密码则是自己设置的密码,不要照抄上面的表
其他部分和上表一样即可
再次提醒:上面修改文件的部分一定要仔细,要不然后面报错回来找错误实在是太折磨了/(ㄒoㄒ)/~~
还记得事先准备好的mysql-connector-java-5.1.42-bin.jar包吗,现在轮到它出场了,把这个压缩包移动到/bigdata/hive/lib文件夹下
mv /home/qyf/Desktop/mysql-connector-java-5.1.42-bin.jar /bigdata/hive/lib
如果忘做该步会有下面的错误提示:
- org.apache. hadoopQ .hive.metastore.HiveMetaException: Failed to load driver
- Underlying cause: java.lang.ClassNotFoundException : com.mysqljdbc.Driver
- Use --verbose for detailed stacktrace.
- *** schemaTool failed ***
执行下面的命令,将元素据在数据库中进行同步:
schematool -dbType mysql -initSchema
如果报出以下错误:
- SLF4J: Class path contains multiple SLF4J bindings.
- SLF4J: Found binding in [jar:file:/bigdata/hive/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
- SLF4J: Found binding in [jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
- SLF4J: See http://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://master:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
- Metastore Connection Driver : com.mysql.jdbc.Driver
- Metastore connection User: hive
- org.apache.hadoop.hive.metastore.HiveMetaException: Failed to load driver
- Underlying cause: java.lang.ClassNotFoundException : com.mysql.jdbc.Driver
- Use --verbose for detailed stacktrace.
- *** schemaTool failed ***
原因是缺少驱动程序,第12步没有做好,请自行检查
如果是以下错误:
- SLF4J: Class path contains multiple SLF4J bindings.
- SLF4J: Found binding in [jar:file:/bigdata/hive/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
- SLF4J: Found binding in [jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
- SLF4J: See http://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://master:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
- Metastore Connection Driver : com.mysql.jdbc.Driver
- Metastore connection User: hive
- Starting metastore schema initialization to 2.1.0
- Initialization script hive-schema-2.1.0.mysql.sql
- Error: CREATE command denied to user 'hive'@'master' for table 'BUCKETING_COLS' (state=42000,code=1142)
- org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !!
- Underlying cause: java.io.IOException : Schema script failed, errorcode 2
- Use --verbose for detailed stacktrace.
- *** schemaTool failed ***
则是mysql用户名、密码或者用户权限出问题了,请检查是否赋予用户hive(我自己设置的用户名,以你自己的用户名为准)权限,以及检查第11步中hive-site.xml文件mysql用户名与密码是否正确
如果输出以下内容,则同步成功:
- [qyf@master conf]$ schematool -dbType mysql -initSchema
- SLF4J: Class path contains multiple SLF4J bindings.
- SLF4J: Found binding in [jar:file:/bigdata/hive/lib/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
- SLF4J: Found binding in [jar:file:/usr/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
- SLF4J: See http://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://master:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
- Metastore Connection Driver : com.mysql.jdbc.Driver
- Metastore connection User: hive
- Starting metastore schema initialization to 2.1.0
- Initialization script hive-schema-2.1.0.mysql.sql
- Initialization script completed
- schemaTool completed
Hive -service metastore &
输入下面命令,可以通过Hive CLI对Hive进行访问
hive
如果是下面这样,则说明环境搭建成功,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。