目录
10. 启动完成后,查看主、从机的进程和 spark 的 UI
hadoop 2.7.2 安装,参考:Hadoop 集群安装配置实验
hive 2.0.0 安装,参考:hive 安装配置实验
hive 2.0.0 初始化需要执行下面的命令:
$HIVE_HOME/bin/schematool -initSchema -dbType mysql -userName=root -passowrd=new_password
否则执行 hive 会报错:
Exception in thread "main" java.lang.RuntimeException: Hive metastore database is not
initialized. Please use schematool (e.g. ./schematool -initSchema -dbType ...) to create
the schema. If needed, don't forget to include the option to auto-create the underlying
database in your JDBC connection string (e.g. ?createDatabaseIfNotExist=true for mysql)
安装 spark
1. 下载 spark 安装包
地址:Downloads | Apache Spark,下载页面如图1 所示:
图1
如果要用 sparksql 查询 hive 的数据,一定要注意 spark 和 hive 的版本兼容性问题,在 hive 源码包的 pom.xml 文件中可以找到匹配的 spark 版本。
2. 解压缩
tar -zxvf spark-1.6.0-bin-hadoop2.6.tgz
3. 建立软连接
ln -s spark-1.6.0-bin-hadoop2.6 spark
4. 配置环境变量
vi /etc/profile.d/spark.sh
# 增加如下两行
export SPARK_HOME=/home/grid/spark-1.6.0-bin-hadoop2.6
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
5. 建立 spark-env.sh
cd /home/grid/spark/conf/
cp spark-env.sh.template spark-env.sh
vi spark-env.sh
# 增加如下配置
export JAVA_HOME=/home/grid/jdk1.7.0_75
export HADOOP_HOME=/home/grid/hadoop-2.7.2
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export SPARK_HOME=/home/grid/spark-1.6.0-bin-hadoop2.6
SPARK_MASTER_IP=master
SPARK_LOCAL_DIRS=/home/grid/spark
SPARK_DRIVER_MEMORY=1G
6. 配置 slaves
cd /home/grid/spark/conf/
vi slaves
# 增加如下两行
slave1
slave2
7. 将配置好的 spark-1.6.0-bin-hadoop2.6 文件远程拷贝到相对应的从机中
scp -r spark-1.6.0-bin-hadoop2.6 slave1:/home/grid/
scp -r spark-1.6.0-bin-hadoop2.6 slave2:/home/grid/
8. 配置 yarn
vi /home/grid/hadoop-2.7.2/etc/hadoop/yarn-site.xml
# 修改如下属性
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
9. 启动集群
# 启动dfs
start-dfs.sh
# 启动yarn
start-yarn.sh
# 启动spark
$SPARK_HOME/sbin/start-all.sh
10. 启动完成后,查看主、从机的进程和 spark 的 UI
分别如图2、图3、图4 所示:
图2
图3
http://192.168.17.210:8080/
图4
11. 测试
# 把一个本地文本文件放到 hdfs,命名为 input
hadoop fs -put /home/grid/hadoop-2.7.2/README.txt input
# 登录 spark 的 Master 节点,进入 sparkshell
cd $SPARK_HOME/bin
./spark-shell
# 运行 wordcount
val file=sc.textFile("hdfs://master:9000/user/grid/input")
val count=file.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)
count.collect()
上面三条命令的执行分别如图5、图6、图7 所示:
图5
图6
图7
测试 SparkSQL。在 $SPARK_HOME/conf 目录下创建 hive-site.xml 文件,然后在该配置文件中,添加 hive.metastore.uris 属性,具体如下:
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
<description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>
</configuration>
启动 hive metastore 服务:
hive --service metastore > /tmp/grid/hive_metastore.log 2>&1 &
启动 SparkSQL CLI:
spark-sql --master spark://master:7077 --executor-memory 1g
这时就可以使用 HQL 语句对 Hive 数据进行查询:
show databases;
create table test;
use test;
create table t1 (name string);
load data local inpath '/home/grid/a.txt' into table t1;
select * from t1;
select count(*) from t1;
drop table t1;
SQL 执行如图8 所示:
图8
做了一个简单的对比测试,300G 数据时,sparksql 比 hive 快近三倍,3T 数据时,sparksql 比 hive 快 7. 5倍。