安装环境为虚拟机centos7,打算在windows的java程序上调用Linux的Hadoop的hdfs。
首先官网 http://hadoop.apache.org/ 下载安装包,解压重命名为hadoop文件夹,将文件夹移动到安装路径:
/opt/module/hadoop
配置环境变量:
在/etc/profile中加入
#hadoop
export HADOOP_HOME=/opt/module/hadoop/
export PATH=$HADOOP_HOME/bin:$PATH
查看版本:
hadoop version
配置文件:
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<!--此处ip需要修改为虚拟机的IP,不是localhost,否则Java程序ping不到9000-->
<value>hdfs://localhost:9000</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/app/data/hadoop/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/app/data/hadoop/datanode</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
在指定的路径下创建三个文件夹:datanode,namenode,tmp
设置Hadoop密码,这里设置免密登录:
ssh-keygen -t rsa
生成新密钥
cd ~/.ssh/
cat id_rsa.pub >> authorized_keys
追加公钥到公共文件
ssh localhost
验证登录
验证登录成功后,可以启动Hadoop
在hadoop/sbin/下,运行start-all.sh
jps验证是否启动
win浏览器访问虚拟机ip下端口50070
命令行查询:hadoop fs -ls /
上传文件:hadoop fs -put test.txt
文件存放位置:上述xml中配置的路径下current/查看
文件下载:hadoop fs -get /test.txt
创建文件夹:hadoop fs -mkdir -p /wordcount/input
java 连接Hadoop:
需要引入依赖
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.7</version>
</dependency>
以上依赖用于操作hdfs
操作工具类:
private static final String HDFS_URI = "hdfs://192.168.78.102:9000/";
private static final String USER = "root";
System.setProperty("hadoop.home.dir", "D:\\hdfs\\");
Configuration conf = new Configuration();
conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
fileSystem = FileSystem.get(new URI(HDFS_URI), conf, USER);
通过以下方法可实现文件上传下载
fileSystem.open
fileSystem.create
fileSystem.copyFromLocalFile
排坑:
1.报错winutils.exe不存在
解决方案:官方包下载后解压找到这个文件,随意新建一个文件夹并在该文件夹下创建bin目录,该文件放置在bin下,System.setProperty(“hadoop.home.dir”, “该文件夹路径(不含bin)”);
例如 D:\hdfs\bin\winutils.exe 设置hadoop.home.dir时候就写D:\hdfs\
这个错误在windows下会出现
2.报错连接失败
检查core-site.xml中的路径,如果在虚拟机或远程服务器上,地址不能写localhost,要写真实的ip
3.理论上讲该教程可用于win安装,但是Hadoop中的yarn与nodejs中的yarn冲突,放弃尝试了。windows安装需要修改配置文件中的ip为本地路径。