hadoop集群配置和在windows系統上運用java操作hdfs
阿新 • • 發佈:2018-12-28
sdn 自帶 aux mkdir del 服務 services export rop
- 安裝
- 配置
- 概念
- hadoop常用shell命令
- 使用java操作hadoop
本文介紹hadoop集群配置和在windows系統上運用java操作hdfs
安裝
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.1/ sudo apt-get install ssh sudo apt-get install rsync mkdir /usr/local/hadoop tar -zxvf hadoop-3.1.1.tar.gz -C /usr/local/hadoop sudo vim /etc/profile export HADOOP_HOME=/usr/local/hadoop/hadoop-3.1.1 export PATH=.:${JAVA_HOME}/bin:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin source /etc/profile hadoop version
配置
服務器
主機名配置 hostname 查看主機名 sudo vim /etc/hostname 修改主機名 sudo vim /etc/hosts 添加如下配置 192.168.76.128 master 192.168.76.129 worker shutdown -r now 重啟電腦 配置集群ssh免密登陸 cd .ssh rm id_rsa id_rsa.pub ssh-keygen -t rsa 進入master主機 cat id_rsa.pub >> authorized_keys 進入worker主機 ssh-copy-id -i master 進入master主機 chmod 600 authorized_keys 進入master主機 scp /root/.ssh/authorized_keys worker:/root/.ssh/ cd /usr/local/hadoop/hadoop-3.1.1/
hadoop-env.sh
sudo vim etc/hadoop/hadoop-env.sh 添加如下配置 export JAVA_HOME=/usr/src/jdk-11.0.1
core-site.xml
sudo vim etc/hadoop/core-site.xml <configuration> <!-- 配置NameNode --> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <!-- 配置數據目錄,用來存放文件 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoopdata</value> </property> </configuration>
hdfs-site.xml
sudo vim etc/hadoop/hdfs-site.xml <configuration> <!-- 配置副本數量 --> <property> <name>dfs.replication</name> <value>2</value> </property> </configuration>
yarn-site.xml
sudo vim etc/hadoop/yarn-site.xml 添加如下配置 <configuration> <!-- 配置管理者--> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce-shuffle</value> </property> </configuration>
mapred-site.xml
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml sudo vim etc/hadoop/mapred-site.xml 添加如下配置 <configuration> <!-- 配置集群運行方式--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapred.job.tracker</name> <value>master:9001</value> </property> </configuration>
start-dfs.sh
sudo vim sbin/start-dfs.sh 添加如下配置 HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
stop-dfs.sh
sudo vim sbin/stop-dfs.sh 添加如下配置 HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
start-yarn.sh
sudo vim sbin/start-yarn.sh 添加如下配置 YARN_RESOURCEMANAGER_USER=root HDFS_DATANODE_SECURE_USER=yarn YARN_NODEMANAGER_USER=root
stop-yarn.sh
添加如下配置 YARN_RESOURCEMANAGER_USER=root HDFS_DATANODE_SECURE_USER=yarn YARN_NODEMANAGER_USER=root
運行
進入master運行 hdfs namenode -format # 格式化 進入master運行 hadoop-daemon.sh start namenode # 開始文件系統 進入worker運行 hadoop-daemon.sh start datanode # 開始文件系統 jps # 查看啟動的namenode netstat -ant # 查看50070端口是否建立連接 訪問 http://master:50070 即可看到管理界面
概念
hdfs集群 負責文件讀寫,namenode管理,datanode負責存儲
yarn集群 為mapreduce程序分配硬件資源,resourcemanager需要單獨放在另外一臺服務器,nodemanager部署在datanode上
hadoop常用shell命令
hadoop fs -ls / 查看fdfs根目錄
hadoop fs -put file1.txt / 上傳文件到fdfs根目錄
hadoop fs -cat /file1.txt 查看文件內容
hadoop fs -mkdir -p /tests/test 創建文件夾
運行自帶的mapreduce程序
cd /usr/local/hadoop/hadoop-2.9.2/share/hadoop/mapreduce
計算指定/tests/test文件夾下面文件的個數,並且將結果放在/test/count下
hadoop jar hadoop-mapreduce-examples-2.9.2.jar wordcount /tests/test /test/count
使用java操作hadoop
依賴
缺一不可 <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.1.1</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>3.1.1</version> </dependency>
在你當前操作系統中添加host信息
C:\WINDOWS\system32\drivers\etc\hosts 修改此文件 192.168.76.128 master 192.168.76.129 worker
上傳文件
Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://master:9000"); FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root"); fs.copyFromLocalFile(new Path("F:/test.txt"),new Path("/"));
下載文件
下載文件需要當前操作系統也要有hadoop環境,關於windows系統裝hadoop環境的步驟如下 1. http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common 下載一個hadoop版本 2. http://download.csdn.net/detail/wuxun1997/9841472 下載windows需要的工具包 3. 解壓hadoop並且配置HADOOP_HOME環境變量,並且在PATH裏加上%HADOOP_HOME%\bin 4. 將工具包解壓的文件放置在hadoop文件夾的bin目錄中,並且將hadoop.dll放置於c:/windows/System32中即可 Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://master:9000"); FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root"); fs.copyToLocalFile(new Path("/test.txt"), new Path("F:/"));
創建文件夾
Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://master:9000"); FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root"); fs.mkdirs(new Path("/app/test"));
列出根目錄所有的文件
Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://master:9000"); FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root"); RemoteIterator<LocatedFileStatus> iterator = fs.listFiles(new Path("/"), true); while (iterator.hasNext()){ LocatedFileStatus next = iterator.next(); System.out.println(next.getPath()); }
列出根目錄所有的文件和文件夾
Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://master:9000"); FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root"); FileStatus[] fileStatuses = fs.listStatus(new Path("/")); for (int i = 0; i < fileStatuses.length; i++) { FileStatus fileStatus = fileStatuses[i]; System.out.println(fileStatus.getPath()); }
刪除文件
Configuration conf = new Configuration(); conf.set("fs.defaultFS","hdfs://master:9000"); FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root"); fs.delete(new Path("/test.txt"), true);
hadoop集群配置和在windows系統上運用java操作hdfs