前面几篇主要是sparkRDD相关的基础,也使用过textFile来操作过本机的文档。实际应用中,操作普通文档的机会不多,更多的时候是操作kafka的流和Hadoop上文件。
下面我们就在本机搭建一个Hadoop环境。
首先下载Hadoop的压缩包,http://www.apache.org/dyn/closer.cgi/hadoop/common/hadoop-2.8.3/hadoop-2.8.3.tar.gz
我这里使用的是2.8.3版本,下载好后解压到某文件夹。
Hadoop依赖于java,所以需要首先在电脑上装好java,配好java的环境变量。
hadoop的可执行文件在sbin目录和bin目录,我们需要将这两个目录配到环境变量Path里。
以mac为例,看环境变量配置,vi .bash_profile :
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
export HADOOP_HOME=/Users/wuwf/Downloads/hadoop-2.8.3
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
配置完毕后,source .bash_profile使环境变量生效。执行hadoop version
weifengdeMacBook-Pro:~ wuwf$ hadoop version
Hadoop 2.8.3
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r b3fe56402d908019d99af1f1f4fc65cb1d1436a2
Compiled by jdu on 2017-12-05T03:43Z
Compiled with protoc 2.5.0
From source with checksum 9ff4856d824e983fa510d3f843e3f19d
This command was run using /Users/wuwf/Downloads/hadoop-2.8.3/share/hadoop/common/hadoop-common-2.8.3.jar
各文件均在hadoop安装目录下etc/hadoop下
加入 export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
后面是你的Java_HOME的路径。
<configuration>
<!--设置临时目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/Users/wuwf/Hadoop/hadoop-2.8.3/data</value>
</property>
<!--设置文件系统-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.1.55:9999</value>
</property>
</configuration>
上面临时目录是本地的一个目录,下面的ip是本机的ip,注意用localhost时后面报错,需要直接填写自己的ip。
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
只有本机一个节点,设置replication为1
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
在目录下创建一个该文件,填入上面的内容
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.1.55:9999</value>
</property>
</configuration>
先执行:hadoop namenode -format
然后启动hdfs:start-dfs.sh,如果mac电脑显示localhost port 22:Connect refused,需要在设置-共享-勾选远程登录,允许访问那个添加当前用户。
执行start-dfs.sh后会要求输入3次密码。
然后:start-yarn.sh
两个命令执行后,通过浏览器访问:localhost:50070
代表hadoop配置成功。
执行如下命令
hdfs dfs -mkdir /wc
hdfs dfs -put a /wc/1.log
hdfs dfs -put a /wc/2.log
hdfs dfs -put a /wc/3.log
先在hdfs上创建一个目录,然后推送本机的文件a到hdfs上,并重新命名。
hdfs dfs -ls /wc 可以查看目录下的文件。
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.SparkSession;
import java.util.List;
/**
* @author wuweifeng wrote on 2018/4/27.
*/
public class Test {
public static void main(String[] args) {
SparkSession sparkSession = SparkSession.builder().appName("JavaWordCount").master("local").getOrCreate();
JavaSparkContext javaSparkContext = new JavaSparkContext(sparkSession.sparkContext());
JavaRDD<String> javaRDD = javaSparkContext.textFile("hdfs://192.168.1.55:9999/wc/1.log");
//取10%的数据,随机数种子自己设定,也可以不设定
JavaRDD<String> sample = javaRDD.sample(false, 0.1, 1234);
long sampleDataSize = sample.count();
long rawDataSize = javaRDD.count();
System.out.println(rawDataSize + " and after the sampling: " + sampleDataSize);
//取指定数量的随机数据
List<String> list = javaRDD.takeSample(false, 10);
System.out.println(list);
//取排序好的指定数量的数据
List<String> orderList = javaRDD.takeOrdered(10);
System.out.println(orderList);
}
}
同样是使用textFile方法,和操作本地文件一样。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有