Blog of Samperson

Ubuntu+Hadoop+Spark+IoTDB部署

2019-07-05

安装及配置Hadoop

[1] 安装apt: sudo apt-get update
[2] 安装vim: sudo apt-get install vim
[3] 安装Java8: sudo apt-get install openjdk-8-jre openjdk-8-jdk
找到安装路径, 用于配置JAVA_HOME环境变量: dpkg -L openjdk-8-jdk
打开配置文件: vim ~/.bashrc
添加安装路径: export JAVA_HOME={JDK安装路径}
使变量生效: source ~/.bashrc
验证: $JAVA_HOME/bin/java -version结果与java -version结果相同。


[4] 安装和配置Hadoop
交叉参见: 零起点Centos+Hadoop+xgboost部署 (伪分布式)

将Hadoop安装至/usr/local/中:

1
2
3
4
sudo tar -zxf ~/Downloads/hadoop-2.6.0.tar.gz -C /usr/local
cd /usr/local/
sudo mv ./hadoop-2.6.0/ ./hadoop
sudo chown -R hadoop ./hadoop

检验Hadoop版本:

1
2
cd /usr/local/hadoop
./bin/hadoop version

安装及配置Spark

[1] 下载地址: http://spark.apache.org/downloads.html

由于已经安装Hadoop,所以“Choose a package type”后选择“Pre-build with user-provided Hadoop”。

[2] 将Spark安装至/usr/local/中:

1
2
3
4
sudo tar -zxf ~/Downloads/spark-2.3.0-bin-without-hadoop.tgz -C /usr/local
cd /usr/local/
sudo mv ./spark-2.3.0-bin-without-hadoop.tgz/ ./spark
sudo chown -R hadoop:hadoop ./spark

[3] 修改Spark的配置文件spark-env.sh:

1
2
3
cd /usr/local/spark
cp ./conf/spark-env.sh.template ./conf/spark-env.sh
vim ./conf/spark-env.sh

[4] 添加: export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath), 用来把数据存储到Hadoop分布式文件系统HDFS中, 也可以从HDFS中读取数据。如果没有配置上面信息, Spark只能读写本地数据, 无法读写HDFS数据。

spark-shell命令

[1] 配置完成后可直接使用,不需要像Hadoop运行启动命令。可以通过运行Spark自带的示例验证Spark是否安装成功: bin/run-example SparkPi 2>&1 | grep "Pi is", 得到π的5位小数近似值。


[2] spark-shell命令及其常用的参数如下: ./bin/spark-shell --master <master-url>。启动spark-shell后, 会进入scala>命令提示符状态, 可以在里面输入scala代码进行调试。


[3] 最后, 可以使用命令:quit退出Spark Shell。


安装及配置IoTDB

[1] git clone源码: git clone https://github.com/apache/incubator-iotdb.git
[2] 删除文件:

1
2
3
cd {incubator-iotdb路径}
rm -rf /iotdb/iotdb/data/
rm -rf /iotdb/iotdb/lib/

[3] 使用Maven编译: mvn clean package -pl iotdb,spark -am -Dmaven.test.skip=true


使用TsFile-Spark-Connector

[1] 命令: ./<spark-shell-path> --jars tsfile-spark-connector.jar,tsfile-0.8.0-SNAPSHOT-jar-with-dependencies.jar, 远程后面添加--master spark://ip:7077。两个jar分别在IoTDB build后的target文件夹中。


[2] 在HDFS中创建一个新文件夹, 用于保存tsfile文件: ./hdfs dfs -mkdir -p /input
创建空文件的命令: ./hdfs dfs -touchz /input/test1.tsfile


[3] 将本地文件存入HDFS: ./hdfs dfs -put test1.tsfile hdfs://localhost:9000/input
将文件取出: ./hdfs dfs -get hdfs://localhost:9000/input/test1.tsfile

Scala API

[1] 环境要求
Spark Version: 2.4.3, Scala Version: 2.11.8, Java Version: 1.8, TsFile: 0.8.0-SNAPSHOT


[2] 从本地文件读

1
2
3
4
import org.apache.iotdb.tsfile._

val df1 = spark.read.tsfile("test.tsfile")
df1.show

[3] 从HDFS文件读

1
2
val df2 = spark.read.tsfile("hdfs://localhost:9000/input/test1.tsfile") 
df2.show

[4] 从HDFS文件夹读

1
2
val df3 = spark.read.tsfile("hdfs://localhost:9000/input") 
df3.show

[5] query操作

1
2
3
4
5
6
7
df3.createOrReplaceTempView("tsfile_table")

val df4 = spark.sql("select * from tsfile_table where `root.d1.s1`>500 and `root.d1.s2` < 500")
df4.show

val df5 = spark.sql("select count(*) from tsfile_table")
df5.show

[6] 写操作

1
df3.write.tsfile("hdfs://localhost:9000/input/test2.tsfile")


参考资料

[1] Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04 http://dblab.xmu.edu.cn/blog/install-hadoop/
[2] Spark2.1.0入门:Spark的安装和使用 http://dblab.xmu.edu.cn/blog/1307-2/
[3] https://iotdb.apache.org/#/Documents/Quick%20Start
[4] Hadoop系列(一)hdfs文件系统的基本操作 https://www.cnblogs.com/qizhelongdeyang/p/8960668.html