首先说明一下hive on spark的版本信息:
jdk-1.8.0
scala-2.11.8
apache-hive-2.3,2.tar.gz
Hadoop-2.7.1
spark-2.0.0-src
maven-3.6.0 注意需要配置maven源(最好配置国内源信息,这样下载会比较快)
下面的配置信息是在maven/conf/settings文件的160行的位置加入。 <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
|
还有hive的安装包,spark-2.0.0的源码包,下面给出我编译好的。链接:
链接:https://pan.baidu.com/s/1HLby39saTvIUOb0j8GkhiA
提取码:3gsy
上面是spark的编译包
下面是apache-hive-2.3.2
http://archive.apache.org/dist/hive/hive-2.3.2/ 或者到这个链接地址下载
链接:https://pan.baidu.com/s/1Q4Sq41k_YI19DSBQQIdUuQ
提取码:r056
1、单机版本 :
1.1安装hadoop2.7.1 伪分布式安装
1.1.1修改配置文件
Hadoop-env.sh
修改JAVA_HOME=export JAVA_HOME=/usr/local/jdk1.7.0_45 |
core-site.xml
<property> <name>fs.defaultFS</name> <value>hdfs://mini01:9000</value> </property> <property> <name>hadoop.tmp.dir</name> 文件存储的名称 <value>/home/hadoop/hdpdata</value> 文件的存储路径 </property> |
yarn-site.xml
<property> <name>yarn.resourcemanager.hostname</name> <value>mini07</value> </property>
<property> //reduce获取数据的方式 shuffle <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> |
hdfs-site.xml
<property> <name>dfs.replication</name> block的副本数 默认是3个 <value>2</value> </property> |
mapred-site.xml
<property> <name>mapreduce.framework.name</name> 表示mapreduce运行在yarn上面 <value>yarn</value> </property> |
savles
//存放的是datanode的节点名称 localhost |
1.1.2配置环境变量
cd /etc/profile
export HADOOP_HOME=…..
source /etc/profile
1.1.3格式namenode
操作: hdfs namenode -format
common.Storage: Storage directory /home/hadoop/hdpdata/dfs/name has been successfully formatted. //表示格式化成功 |
1.1.4启动hadoop伪分布式
cd 到hadoop目录的/sbin/start-all.sh
2、spark编译
二.下载源码spark2.0.0,编译
下载地址:http://archive.apache.org/dist/spark/spark-2.0.0/
编译: ./dev/make-distribution.sh --name "hadoop2-without-hive" --tgz "-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided"
三.将编译好的spark-2.0.0-bin-hadoop2-without-hive.tgz
tar -zxvf spark-2.0.0-bin-hadoop2-without-hive.tgz -C /home/Hadoop/apps/
在/etc/profile里配置好 $SPARK_HOME环境变量,并 . /etc/profile使环境变量生效。
export JAVA_HOME=/usr/local/jdk1.8.0_171 export SCALA_HOME=/usr/local/scala-2.11.8 export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.1 export ZOOKEEPER_HOME=/home/hadoop/apps/zookeeper-3.4.7 export MAVEN_HOME=/home/hadoop/apps/apache-maven-3.6.0 export SPARK_HOME=/home/hadoop/apps/spark-2.0.0-bin-hadoop2-without-hive export HIVE_HOME=/home/hadoop/apps/apache-hive-2.3.2-bin export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$SCALA_HOME/bin:$MAVEN_HOME/bin:$SPARK_HOME/bin:$HIVE_HOME/bin:$ZOOKEEPER_HOME/bin |
上面是整个环境变量的配置
编辑spark的配置文件 cd /spark/conf
spark-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_171 export SCALA_HOME=/usr/local/scala-2.11.8 export HADOOP_HOME=/home/hadoop/apps/hadoop-2.7.1 export HADOOP_CONF_DIR=/home/hadoop/apps/hadoop-2.7.1/etc/hadoop export HADOOP_YARN_CONF_DIR=/home/hadoop/apps/hadoop-2.7.1/etc/hadoop export SPARK_HOME=/home/hadoop/apps/spark-2.0.0-bin-hadoop2-without-hive export SPARK_WORKER_MEMORY=512m export SPARK_EXECUTOR_MEMORY=512m export SPARK_DRIVER_MEMORY=512m export SPARK_DIST_CLASSPATH=$(/home/hadoop/apps/hadoop-2.7.1/bin/hadoop classpath) |
3) 把spark/jars/*.jar 全部上传到hdfs的目录下,这样在每次run application 的时候,不需要每次都去分发这些jar包资源。
hdfs dfs -mkdir /spark-jars
hdfs dfs -put ./jars/*.jar /spark-jars
4) 启动spark进行验证:
start-all.sh
看web UI
5) 安装配置hive
首先在mysql数据库里面创建hive数据库和相关的用户 该数据库是用来保存hive的元数据信息的。
*)创建一个新的数据库:create database hive;
*)创建一个新的用户:
create user 'hiveowner'@'%' identified by ‘hive’; //表示用户名hiveowner pass: hive
*)给该用户授权
grant all on hive.* TO 'hiveowner'@'%';
grant all on hive.* TO 'hiveowner'@'localhost' identified by 'hive';
6) 设置hive的环境变量 这个前面已经弄过了。
7) 拷贝spark下的jar包到hive的lib下
cp scala-library-2.11.8.jar /usr/share/hive-2.3.3/lib/
cp spark-core_2.11-2.0.0.jar /usr/share/hive-2.3.3/lib/
cp spark-network-common_2.11-2.0.0.jar /usr/share/hive-2.3.3/lib/
8)在HDFS上创建目录:/sparkeventlog用于保存log信息
hdfs dfs -mkdir /spark-log //记录日志信息
9) 配置hive的hive-site.xml
cp hive-defaults.xml.template hiev-site.xml
vi hive-site.xml
这里只是给出相关的设置以及会报错的配置
<property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hive</value> <description>password to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hiveowner</value> <description>Username to use against metastore database</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>hive.execution.engine</name> <value>spark</value> <description> Expects one of [mr, tez, spark]. Chooses execution engine. Options are: mr (Map reduce, default), tez, spark. While MR remains the default engine for historical reasons, it is itself a historical engine and is deprecated in Hive 2 line. It may be removed without further warning. </description> </property> <property> <name>hive.enable.spark.execution.engine</name> <value>true</value> </property> <property> <name>spark.home</name> <value>/home/hadoop/apps/spark-2.0.0-bin-hadoop2-without-hive</value> </property> <property> <name>spark.master</name> <value>yarn-client</value> </property> <property> <name>spark.eventLog.enabled</name> <value>true</value> </property> <property> <name>spark.eventLog.dir</name> <value>hdfs://mini07:9000/spark-log</value> </property> <property> <name>spark.serializer</name> <value>org.apache.spark.serializer.KryoSerializer</value> </property>
<property> <name>spark.executor.memory</name> <value>512m</value> </property> <property> <name>spark.driver.memory</name> <value>512m</value> </property> |
其他的保持原来的默认的。即可ok
10) 进入到hive的bin目录下面
./schemTool -dbType mysql -initSchema
然后执行./hive
use test01;
create table emp1(emp int, ename string) row foemat delimited fields terminated by ‘,’;
load data local inpath ‘/home/Hadoop/data01.txt’ into table emp1;
select count(1) from emp1;
注意这里会报错的:
检查Yarn web console
查看历史信息,我们会发现:
这个错误的原因是由于yarn的虚拟内存计算而导致的错误,我们需要修改信息,在hadoop的配置文件yarn-site.xml里面添加配置信息:
<property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> <description>表示是进制虚拟内存检查</description> </property> |
重新启动hadoop hive spark
执行hive操作
select count(1) from emp1;
use 我们在yarn的web console查看 :如下
在看看hive的客户端执行的结果:
这个截图里面是两次执行的结果:结果返回10,这个表里面刚好是10条数据:
在看看查询的时间消耗上 在第一次执行的时候会比较慢,第二次的话就会很快,这个中间是有sql的缓存。
11) 此时其实我们可以把spark集群关闭了。然后还是依然可以执行的。
所以现在我们把hive的执行引擎换成了spark。下次要是只是利用hive的话,则完全没有必要去启动spark集群了。
12) 说一下hadoop的伪分布式安装配置信息:如下图所示: