1、hdfs-site.xml文件:
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/spark/hadoop-2.6.0/tmp/dfs/name</value> #只需要手动创建/spark/hadoop-2.6.0/tmp目录就好
</property>
<property>
<name>dfs.data.dir</name>
<value>/spark/hadoop-2.6.0/tmp/dfs/data</value> #只需要手动创建/spark/hadoop-2.6.0/tmp目录就好
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
2、core-site.xml文件:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://kid</value> #kid是我的主机名
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/spark/hadoop-2.6.0/tmp</value> #手动创建这个目录
</property>
</configuration>
3、mapred-site.xml文件:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
4、不用配置yarn-site.xml文件
5、在/spark/hadoop-2.6.0/etc/hadoop目录下创建文件masters,并写入kid(我的主机名)
6、在/spark/hadoop-2.6.0/etc/hadoop目录下创建文件slaves,并写入kid。和masters文件的内容一样,是因为这是伪分布模式,主从主机都是主节点本身。
7、其他需要导出的环境变量配置请参考别的文章,比较简单。
8、启动hadoop:
hadoop namenode -format
./start-all.sh #在/spark/hadoop-2.6.0/sbin下执行
打开http://localhost:50070就可以看到界面了
出现的小问题:
kid: ssh: connect to host kid port 22: Connection timed out
打开/etc/hosts之后,发现是因为ip地址与kid对应关系错了。
9、打开spark连接hadoop:
./start-all.sh #在/spark/spark-1.6.0/sbin下执行
打开http://localhost:8080就可以看到界面了
10、在hadoop上创建文件后,打开spark-shell界面,运行统计词频的代码:
hadoop dfs -mkdir -p /user/hadoop #创建目录
hadoop dfs -put input_file.txt /user/hadoop #上传文件
scala> val file=sc.textFile("hdfs:///user/hadoop/input_file.txt") #hdfs上的文件中径为:/user/hadoop/input_file.txt
scala> val count=file.flatMap(line => line.split(" ")).map(word => (word,1)).reduceByKey(_+_)
scala> count.collect() #输出结果
scala> count.saveAsTextFile("hdfs:///user/hadoop/result") #存放到result目录下
hadoop dfs -copyToLocal /user/hadoop/result ./ #下载结果
默认是从hdfs读取文件,也可以指定sc.textFile("路径").在路径前面加上hdfs://表示从hdfs文件系统上读
本地文件读取 sc.textFile("路径").在路径前面加上file:// 表示从本地文件系统读,如file:///home/user/spark/README.md