由于本人最近在做一个baseline实验,需要使用到spark sql来连接hive,数据保存在hdfs中。通过本人这几天的不断摸索,终于在实验室服务器上部署完成,现记录安装过程以防未来翻车。以下所有的安装部署都是基于单机版,集群版还在探索中ing。。。。。
Prerequisite:
1、JAVA
2、SCALA
3、Hdfs
4、Hive
5、Spark
实验环境:Centos
下面逐一来进行安装部署。
1、JAVA环境安装
本实验中使用的是JAVA8。由于sun公司被oracle收购了,导致现在java安装包下载略有点麻烦(从官网下载的话需要注册oracle账号),安装包就自己解决把。不过需要注意的是,最好下载二进制压缩文件或者rpm也可。(实在找不到安装包的小伙伴,可私信博主哦)
将下载好的安装包解压缩到某个路径下(这里提醒一下各看官最好是统一管理,不要东一个文件西一个文件)。使用如下代码段进行解压。
tar -zxvf 你的安装包路径 -C 你要解压到的路径
注意解压完之后安装包,需要配置一下你的路径。各大博客都是说在etc/profile中配置路径,但是这个文件只有root用户才有权限进行修改哦。因此作为卑微的普通用户,这里建议在bashrc中导入路径。
vi ~/.bashrc
使用vi编辑器来修改bashrc(不会使用vi编辑器的请自行google),导入你的java安装路径,也就是解压后的路径。
export JAVA_HOME=你的java安装路径
export PATH=$JAVA_HOME/bin:$PATH
修改完后bashrc,需要使得你修改的路径有效,输入如下命令将你的修改有效。
source ~/.bashrc
按上述步骤后,java环境就已经配置好啦,java环境配置好后,输入java -version,如果看到版本信息则说明java环境已经安装成功啦!
恭喜你在spark部署的路上迈出了第一步!!!
2、SCALA环境安装
虽然spark官方说,spark内置了scala环境,但咱们需要编译spark源码,因此还是配置一下scala环境保险一点,毕竟也就几行代码的事。(安装包请自行下载)这里请注意,scala的版本和spark版本需要互相对应,如果是spark3的话,最好是使用scala2.13.4以上的版本。
tar -zxvf scala安装包路径 -C 要解压到的路径
同样的,配置路径,这里将代码放一起,可参考java的安装步骤。
#打开编辑器
vi ~/.bashrc
#导入路径
export SCALA_HOME=scala的解压路径
export PATH=$JAVA_HOME/bin:$SCALA_HOME/bin:$PATH
#生效
source ~/.bashrc
上述步骤完成后,输入scala -version,如果看到版本信息则说明scala环境已经安装成功。
3、Hdfs部署
hdfs是apache hadoop的一个子项目,是一个分布式文件系统,可用来存储共享大文件。由于hadoop中的mapreduce等目前还无需求,因此只安装部署hdfs。
本实验中使用的是hadoop3-.2.2, 下载地址为:Apache Hadoop
解压缩安装包
tar -zxvf hadoop安装包 -C 你要解压到的路径
配置路径
#打开编辑器
vi ~/.bashrc
#导入路径
export HADOOP_HOME=hadoop解压路径
export PATH=%JAVA_HOME/bin:$SCALA_HOME/bin:$HADOOP_HOME/bin:$PATH
#使修改生效
source ~/.bashrc
修改配置文件
以下操作均在hadoop安装路径的etc/hadoop路径下进行。
(1)修改hadoop-env.sh,在文件最下面输入如下语句。
export JAVA_HOME=java的安装路径
export HADOOP_HOME=hadoop安装路径
(2)修改core-site.xml, 将core-site.xml修改成如下内容,端口号如果冲突可换成另一个无冲突的端口号。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9001</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:你自己创建的tmp目录路径</value>
</property>
</configuration>
(3)修改hdfs-site.xml,将hdfs-site.xml修改成如下内容。端口号如遇冲突,可换成其他端口号。
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:namenode数据保存路径</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:datanode数据保存路径</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.https.address</name>
<value>localhost:9870</value>
</property>
</configuration>
上面修改配置文件中的路径,都需要自己另行创建(随便创建在哪个目录下,不过最好统一组织一下)。
(4)配置免密登录。
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
输入 ssh localhost,如果出现Last Login的字样,则免密登录设置成功。
至此,hdfs环境已经配置好啦,现在开始测试hdfs是否配置成功。初次启动hdfs,需要对namenode进行格式化。
hdfs namenode -format
cd到hadoop安装路径下的sbin目录下,输入./start-dfs.sh,再输入jps,若出现如下图,则说明hdfs启动成功。
最后测试webUI是否成功,在浏览器中输入https://ip地址//9870,如果网页加载不成功,请考虑端口号是否出现冲突的情况。
4、Hive安装部署
hive安装除了上述环境后,还需要mysql来保存元数据,本实验中使用的是mariadb。mariadb或者mysql安装教程请自行google,需要注意的是需要将mariadb的编码修改成utf-8。
hive安装包下载地址:https://archive.apache.org/dist/hive/hive-3.1.0/
解压压缩包,并配置路径。
tar -zxvf hive安装包 -C 你要解压到的路径
vi ~/.bashrc
export HIVE_HOME=你的解压路径
export PATH=$HIVE_HOME/bin:$PATH
source ~/.bashrc
(1)修改hive配置文件。
HIVE的所有配置文件都在$HIVE_HOME的conf文件下,所有的修改操作都需要cd到conf文件下进行操作。
修改hive-env.sh文件
cp hive-env.sh.template hive-env.sh
vi hive-env.sh
#在文件尾部添加如下内容
export JAVA_HOME=你的java安装路径
export HADOOP_HOME=你的hadoop安装路径
export HIVE_CONF_DIR=$HIVE_HOME/conf #注意这里需要根据情况修改这个$HIVE_HOME
修改hive-site.xml文件
cp hive-default.xml.template hive-site.xml
vi hive-site.xml
在文件内容界面下使用? for&#?找到相应行将其替换成for后,再将下列值替换成如下值。
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://你安装了数据库的主机的ip:3306/hive?createDatabaseIfNotExist=true</value>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>org.mariadb.jdbc.Driver</value>
<name>javax.jdo.option.ConnectionUserName</name>
<value>mariadb用户名</value>
<name>javax.jdo.option.ConnectionPassword</name>
<value>mariadb用户名密码</value>
<name>hive.exec.local.scratchdir</name>
<value>/tmp/hive</value>
<name>hive.downloaded.resources.dir</name>
<value>/tmp/${hive.session.id}_resources</value>
<name>hive.querylog.location</name>
<value>/tmp/hive</value>
<name>hive.server2.logging.operation.log.location</name>
<value>/tmp/hive/operation_logs</value>
下载JDBC驱动,下载地址:https://downloads.mariadb.com/Connectors/java/,本次实验选择mariadb-java-client-2.3.0.jar,将该jar包放入$HIVE_HOME/lib目录下。
在hdfs中创建HIVE数据存放目录
hadoop fs -mkdir /tmp
hadoop fs -mkdir -p /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse
至此,hive环境已经部署成功了。下面开始验证HIive。
初始化Hive
schematool -dbType mysql -initSchema
输入hive,启动hive,若启动成功则如下图所示:
5、spark编译安装
由于spark官网提供的预编译的二进制安装包不支持hive,因此如果需要支持hive的spark,需要自己手动编译。spark官方规定,若要编译spark3源码,则需要maven3.3.9版本以上,本实验中使用的是maven3.6.3,maven安装教程请自行google(比较简单)。
首先,从官网下载源码。
解压缩源码,解压缩后,cd到spark源码所在目录,运行如下代码
mvn -Pyarn -Phadoop-3.2 -Dhadoop.version=3.2.2 -Phive -Phive-thriftserver -DskipTests clean package
hadoop版本要和自己已安装好的hadoop版本相对应。命令表示生成的spark支持hadoop、hive、yarn,整个上面过程大约耗时半小时(可以利用这段时间名正言顺的魔摸鱼了),如果出现下载卡顿的情况,建议将maven的下载源改成华为源,这速度嚓嚓嚓的就提升上去了。
maven编译成功后,如果想要官网提供的那种二进制压缩包,则还需要输入以下命令
./dev/make-distribution.sh --name sparkwithhive --tgz -Pyarn -Phadoop-3.2 -Dhadoop.version=3.2.2 -Phive -Phive-thriftserver -DskipTests
整个过程耗时差不多也半小时,这时候你会发现在spark源码目录下会出现一个压缩包,这个就是编译好的支持hive的压缩包。
好了,下面开始安装spark了
解压缩,配置路径
tar -zxvf spark安装包 -C 解压路径
vi ~/.bashrc
export SPARK_HOME=解压路径
export PATH=$SPARK_HOME/bin:$PATH
source ~/.bashrc
配置spark-env.sh
位置在:$SPARK_HOME/conf/spark-env.sh.template
cp spark-env.sh.template spark-env.sh
vi spark-env.sh
在spark-env.sh中输入如下内容
export JAVA_HOME=java安装路径
export SCALA_HOME=scala安装路径
export SPARK_HOME=spark安装路径
#单机版配置为本机ip
export SPARK_MASTER_IP=127.0.0.1
export SPARK_EXECUTOR_MEMORY=1G
export SPARK_DIST_CLASSPATH=$(hadoop classpath)
配置slaves
位置在:$SPARK_HOME/conf/slaves.template
cp slaves.template slaves
在slaves文件最后加上localhost
至此,spark已经安装好啦。
cd到$SPARK_HOME/bin下启动spark-sql和spark-shell。
spark连接hive:
(1)将hive安装目录下的core-site.xml拷贝到spark的conf目录下。
(2)将配置hive时使用的mariadb-java-client-2.3.0.jar包拷贝到spark的jars目录下。
测试连接hive是否成功,启动spark-shell,输入import org.apache.spark.sql.hive.HiveContext,没报错,则说明spark可连接到hive。spark-sql同样也可以连接hive。
plus:在上述所有的安装部署过程中,尤其是在hive和spark启动时,可能会报methodnotFound的错误,一个原因是hive和spark中存在一个名叫guava的jar包和hadoop的guava jar包版本不一致,只需将hive(spark)或hadoop的guava jar包改成版本更高的即可,即使得jar包版本一致。