雲服務器僞分佈式hadoop配置+javaAPI上傳下載刪除操縱(踩坑總結)
注:本博文主要針對單臺雲服務器hadoop安裝配置。博主使用阿里雲的ECS服務器,Centos7系統,公網ip:120.27.244.176 私網ip:172.16.236.135 安全組開放所有端口,即1/65535
一、準備
- 創建:
mkdir -p /opt/hadoop
- 進入:
cd -p /opt/hadoop
- 上傳:
- 解壓:
tar -zxvf hadoop-2.7.3.tar.gz
- 配置hosts:
vi /etc/hosts
//必須添加內網ip
172.16.236.135 hadoop.idse.top
- 配置環境變量
vi /etc/profile
//添加環境變量
#配置hadoop
export HADOOP_HOME=/opt/hadoop/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin
//刷新配置
source /etc/profile
二、 配置hadoop
- 修改hadoop-env.sh
cd /opt/hadoop/hadoop-2.7.3/etc/hadoop/
vi hadoop-env.sh
//找到並修改
export JAVA_HOME=/opt/java/jdk1.8.0_141
- 修改core-site.xml
vi core-site.xml
//注意域名端口改爲自己的hosts中設置
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop.idse.top:9000</value>
</property>
<!-- 指定hadoop運行時產生文件的存儲目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/zhiyou/hadoop/tmp</value>
</property>
- 配置hdfs-site.xml
vi hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
- 配置yarn-site.xml
vi yarn-site.xml
//注意修改域名配置
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop.idse.top</value>
</property>
<!-- reducer獲取數據的方式 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
- 配置mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
- 啓動
cd /opt/hadoop/hadoop-2.7.3/sbin/
./start-all.sh
- 查看進程:
jps
- 瀏覽器訪問(公網ip+端口):
120.27.244.176:50070
坑1:未成功訪問請去安全組開放端口,自行百度hadoop所需端口,博主全開。
三、javaAPI上傳下載文件測試
@Test//上傳
public void upload() throws IOException, InterruptedException, URISyntaxException{
//1.實例化configuration
Configuration conf = new Configuration();
/*雲服務器必須配置*/
conf.set("dfs.replication", "1");
conf.set("dfs.client.use.datanode.hostname", "true");
//2.獲取文件系統
FileSystem fs = FileSystem.get(new URI("hdfs://120.27.244.176:9000/"), conf, "root");
//3.上傳fs.copyFromLocalFile(本地文件,目標地址)
fs.copyFromLocalFile(new Path("C:\\Users\\NEVER\\Desktop\\day04-06\\day04_05fastJson的使用.avi"),new Path("/day04_05fastJson的使用.avi"));
//4.關閉連接
fs.close();
}
@Test//下載
public void download() throws IOException, InterruptedException, URISyntaxException{
//1.實例化configuration
Configuration conf = new Configuration();
conf.set("dfs.replication", "1");
conf.set("dfs.client.use.datanode.hostname","true");
//2.獲取文件系統
FileSystem fs = FileSystem.get(new URI("hdfs://120.27.244.176:9000/"), conf, "root");
//3.下載
//fs.copyToLocalFile(目標文件,本地地址)
fs.copyToLocalFile(false,new Path("/c.jpg"), new Path("E:/d.jpg"),true);
//4.關閉連接
fs.close();
}
@Test//刪除
public void remove() throws IOException, InterruptedException, URISyntaxException{
//1.實例化configuration
Configuration conf = new Configuration();
//2.獲取文件系統
FileSystem fs = FileSystem.get(new URI("hdfs://120.27.244.176:9000/"), conf, "root");
//fs.delete(要刪除的文件,boolean true false-只能刪除空的文件夾)
fs.delete(new Path("/dow3.txt"),true);
fs.close();
}
坑2:必須加上 conf.set(“dfs.replication”, “1”);
conf.set(“dfs.client.use.datanode.hostname”, “true”);不然上傳會爲空文件