赞
踩
下载地址:https://mirrors.tuna.tsinghua.edu.cn(清华大学开源软件镜像站);
具体地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.2/ (版本3.2.2)
一共需要修改七个文件(如果要配置集群则还需要再加上一个文件,共八个)
增加
<configuration>
<!-- 本属性为jdbc连接的url地址和端口,为连接本机 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://127.0.0.1:9000</value>
</property>
<!-- 本属性会指定hadoop的临时文件目录 默认在Linux的/tmp目录下 但是由于Linux重启后/tmp目录下的所有文件会清空 会造成hadoop临时文件丢失。而hdfs-default.xml文件中的配置项dfs.namenode.name.dir默认就是在hadoop的临时文件目录下 它保存的是fsimage文件 因此一旦配置在默认路径下 Linux重启后fsimage文件就会丢失 元数据十分重要 一旦丢失 整个hdfs集群就会崩溃 因此需要将hadoop临时文件配置在其他安全的目录。 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/mi/DevelopHome/hadoop-3.2.2/hadoop_tempdir</value>
</property>
</configuration>
增加
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
增加
<configuration>
<!-- hdfs分区备份数,默认为3,这里设置为1 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
增加
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
增加
<!-- 把所有路径对应好hadoop安装的根路径 --> <configuration> <property> <name>mapreduce.application.classpath</name> <value>/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/mapreduce/*, /home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/mapreduce/lib/*</value> </property> <!-- 设置hadoop资源管理器为yarn --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=/home/mi/DevelopHome/hadoop-3.2.2</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=/home/mi/DevelopHome/hadoop-3.2.2</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=/home/mi/DevelopHome/hadoop-3.2.2</value> </property> </configuration>
增加
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
增加
<configuration> <!-- namenode对应的地址,本地测试则为本机 --> <property> <name>yarn.resourcemanager.hostname</name> <value>127.0.0.1</value> </property> <!-- shuffle机制 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 本属性的值,由终端中录入:hadoop classpath而生成 --> <property> <name>yarn.application.classpath</name> <value>/home/mi/DevelopHome/hadoop-3.2.2/etc/hadoop:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/common/lib/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/common/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/hdfs:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/hdfs/lib/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/hdfs/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/mapreduce/lib/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/mapreduce/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/yarn:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/yarn/lib/*:/home/mi/DevelopHome/hadoop-3.2.2/share/hadoop/yarn/*</value> </property> </configuration>
修改/etc/profile,添加如下:
export HADOOP_HOME=/home/mi/DevelopHome/hadoop-3.2.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
注意修改后在终端录入:
source /etc/profile
使其立刻生效。
在master上格式化hdfs文件系统:
hdfs namenode -format
这个命令只能在指定的namenode上输入,初始化后会在二(1)配置的临时文件中生成初始文件,该初始化过程一般只在最开始安装完成hadoop后初始化一次。
如果跳过本步执行下面,会报出无权限的问题,需要设置。
ssh-keygen
会让你指定公钥和私钥的生成地址,默认在.ssh目录中,一路下一步就好。
将公钥追加到本地的认证文件中:
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
在新的终端下启动hdfs和yarn
start-dfs.sh
start-yarn.sh
或者直接全部启动:
start-all.sh
如果没有设置免密登录 此时就会多次报出无权限。
hadoop的启动为hive启动的前置工作。到此为止,hadoop配置并启动完成!
注意事项:
(1)hadoop 3的http默认端口号为9870(2为50070),进入hadoop的http页面,可以查看hdfs存储文件,点击导航栏【Utilities】,在二级菜单中点击【Browse the file system】浏览文件系统。hdfs的默认存储目录在上面设置为了“/user/hive_remote/warehouse”。
(2)namenode 3的rpc默认端口号为9820(2为8020))。
(3)yarn的http端口号为8088,可以查看任务提交情况。
(4)如果想查看JobHistory,可以调用指令
mr-jobhistory-daemon.sh start historyserver
启动其然后查看,启动后访问JobHistory的http端口为:19888。
利用jps-l或者jps-m查看hadoop的启动进程,为NodeManager、DataNode、SecondaryNameNode、NameNode。
执行下面指令直接全部关闭:
stop-all.sh
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.2/
一共需要修改两个文件
增加
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
HADOOP_HOME=/home/mi/DevelopHome/hadoop-3.2.2
去掉
<configuration>
......
</configuration>
所有配置,然后再增加
<configuration> <!-- 这里的value为hdfs文件存储位置 --> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </property> <!-- 是否调用本地的metastore:否 --> <property> <name>hive.metastore.local</name> <value>false</value> </property> <!-- 远程metastore的地址:localhost:9083 --> <property> <name>hive.metastore.uris</name> <value>thrift://localhost:9083</value> </property> <!-- mysql作为hive的metastore,于是设置mysql的url地址与端口,这里为本机地址和mysql的默认端口,下面的value信息中,metastore的存储库为hive,“createDatabaseIfNotExist=true”表示如果该库不存在就去创建该库,且注意,要设置useSSL=false从而取消ssl校验 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> <!--这里设置的是本地mysql的用户名--> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> <!--这里设置的是本地mysql的密码--> </property> <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> <property> <name>datanucleus.autoCreateTables</name> <value>true</value> <description>不存在时,自动创建Hive元数据表</description> </property> <property> <name>datanucleus.autoCreateColumns</name> <value>true</value> <description>不存在时,自动创建Hive元数据列</description> </property> <property> <name>datanucleus.fixedDatastore</name> <value>false</value> </property> <property> <name>datanucleus.autoStartMechanism</name> <value>SchemaTable</value> </property> </configuration>
修改/etc/profile,添加如下:
export HIVE_HOME=/home/mi/DevelopHome/apache-hive-3.1.2-bin
export PATH=$HIVE_HOME/bin:$PATH
注意修改后在终端录入:
source /etc/profile
使其立刻生效。
apache-hive-3.1.2-bin/lib下的guava版本为19,hadoop-3.2.2/share/hadoop/common/lib下的guava版本为27,两者的不一致,会导致启动hive相关时报出找不到方法的异常,因此将apache-hive-3.1.2-bin/lib下的guava直接替换成hadoop的版本27的,从而解决。
用mysql作为metastore,需要在apache-hive-3.1.2-bin/lib下引入“mysql-connector-java-5.1.47.jar”(版本可自行选择)
在新的终端下
hive --service metastore
在新的终端下
hive --service hiveserver2
由于已经修改了/etc/profile,则在新的终端下直接录入
hive
到此为止,hive配置启动完成!
注释:以上的启动新终端的流程,可以直接利用后台执行的方式:
nohup 要执行的指令 &
直接查看hive的进程名称,利用
jps -l
或者查看进程名称和所属jar文件
jps -m
杀掉对应了HiveMetaStore的RunJar的进程号的进程和对应了HiveServer2的RunJar的进程号的进程,利用
kill -9 进程号
到此,Hive的关闭流程执行完成。
进入mysql的hive库后查看表,DBS表内存储着元数据,COLUMNS_V2表存储着表对应的字段信息,TBLS表可以查看表owner以及该表到底是内部表还是外部表,PARTITIONS表可以查看分区信息。
hive默认的对本机的连接ip端口为:jdbc:hive2://127.0.0.1:10000
driverName为:org.apache.hive.jdbc.HiveDriver
注意hadoop和hive的版本要与下载的hadoop和hive尽量一致,以防止冲突。
<dependencies> <!-- hadoop 3.2.2--> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>3.2.2</version> <exclusions> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.2.2</version> </dependency> <!-- hive 3.1.2--> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-metastore</artifactId> <version>3.1.2</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>3.1.2</version> </dependency> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>3.1.2</version> </dependency> </dependencies>
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class HiveConnection { private static final String driverName = "org.apache.hive.jdbc.HiveDriver"; private static final String url = "jdbc:hive2://127.0.0.1:10000"; private static Connection con = null; private static Statement state = null; private static ResultSet res = null; public static void main(String[] args) throws Exception { Class.forName(driverName); con = DriverManager.getConnection(url); state = con.createStatement(); res = state.executeQuery("show databases");//执行的sql为查询所有db while (res.next()) { System.out.println(res.getString(1)); } } }
此时直接执行会报出禁止匿名访问、拒绝连接等错误,所以需要在hadoop的core-site.xml配置文件中对访问进行开放。
在core-site.xml的 configuration标签中加入property,如下:
<!-- mi为当前本机的用户名,需要灵活修改,本属性的意义为允许用户组的一切访问 -->
<property>
<name>hadoop.proxyuser.mi.groups</name>
<value>*</value>
</property>
<!-- mi为当前本机的用户名,需要灵活修改,本属性的意义为开放host的一切访问 -->
<property>
<name>hadoop.proxyuser.mi.hosts</name>
<value>*</value>
</property>
此时再去执行jdbc连接,可以成功获得结果!
需要说明:spark的安装,只为了直接在终端执行spark-shell(sparkSQL)和spark-submit(提交sparkjob的jar文件给spark),不需要安装spark,则已经可以通过代码,引入spark的pom,在代码中调用spark操作。
参见笔者的另一篇博客:
Spark的基本使用入门
引入pom,编写scala代码即可。
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/spark/(清华大学开源软件镜像站);
(1) 把解压出的spark文件夹放到相应目录,本机配置环境变量:
export SPARK_HOME=/home/mypc/DevelopHome/spark-3.2.0-bin-hadoop3.2
export PATH=$SPARK_HOME/bin:$PATH
(2)修改spark的conf/spark-defaults.conf配置
spark.yarn.historyServer.address=127.0.0.1:18080 #设置了spark在yarn上的historyserver地址端口
spark.history.ui.port=18080
spark.eventLog.enabled=true #开启spark的event日志
spark.eventLog.dir=hdfs://127.0.0.1:9000/tmp/spark/events #设置event日志目录,该目录在hdfs上如果没有创建,则需要先手动创建,创建方式见附5,127.0.0.1:9000为本机的hadoop的rpc链接
spark.history.fs.logDirectory=hdfs://127.0.0.1:9000/tmp/spark/events #设置history日志目录,该目录在hdfs上如果没有创建,则需要先手动创建,创建方式见附5,与上面日志设置为统一目录,127.0.0.1:9000为本机的hadoop的rpc链接
(3)对hadoop的配置文件yarn-site.xml增加内容,如下:
<!-- 开启对yarn内的日志聚合,否则,暂存与8088下可以看到的job信息,一段时间会过期被清理 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 设置yarn下聚合到JobHistory时,JobHistory的地址 --> <property> <name>yarn.log.server.url</name> <value>http://127.0.0.1:19888/jobhistory/logs</value> </property> <!-- 设置是否开启pmem(physics memory)物理内存检查:关闭。防止yarn把job下占用内存空间较大的container杀掉 --> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <!-- 设置是否开启vmem(virtual memory)虚拟内存检查:关闭。防止yarn把job下占用内存空间较大的container杀掉 --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
(4)在hadoop-3.1.2/etc/hadoop/mapred-site.xml配置文件中,设置mr任务历史信息目录:
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/user/history/done</value>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/user/history/done_intermediate</value>
</property>
为了使spark能够确立找到本机的yarn-site.xml,需要再在环境变量中增加如下配置,则spark会默认到这个目录中寻找对应的yarn-site.xml:
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
spark-shell --master yarn --deploy-mode client
deploy-mode分为cluster和client,cluster是指job会调用集群中负载量最低的进行操作,client是指job会调用当前节点进行操作,spark-shell指定了只能使用client的模式。
(1)访问方式:
在配好环境变量的前提下,基本访问格式如下:
hadoop fs 相关指令(都以-开头)
由于是针对hdfs进行操作的,所以与下面格式指令等效
hdfs dfs 相关指令(都以-开头)
(2)查看指定目录下的信息
下面为查看根目录下的test1文件夹下的内容
hadoop fs -ls /test1
(3)查看指定目录下的文件内的信息
下面为查看根目录下的test1下的hehe.xml文件内的信息
hadoop fs -cat /test1/hehe.xml
(4)复制本地文件到hdfs
下面为把本地目录/home/mypc/文档/hehe.xml这个文件复制到hdfs的/test1目录
hadoop fs -put /home/mypc/文档/hehe.xml /test1
(5)复制hdfs文件到本地
下面为把hdfs目录下的/test1/hehe.xml这个文件复制到本地目录/home/mypc/文档
hadoop fs -get /test1/hehe.xml /home/mypc/文档
(6)在hdfs上从一个文件目录复制到另一个文件目录
下面为把hdfs目录下的/test1/hehe.xml这个文件复制到hdfs的/abc目录
hadoop fs -cp /test1/hehe.xml /abc
(7)创建文件夹
下面为在根目录创建文件夹/abc
hadoop fs -mkdir /abc
(8)创建级联文件夹
hadoop fs -mkdir -p /aaa/bbb
(9)创建文件
hadoop fs -touch /aaa/wa.txt
(10)删除指定文件或文件夹
下面为删除指定文件/abc/hehe.xml
hadoop fs -rm /abc/hehe.xml
(11)递归删除指定文件夹下所有内容
下面为删除指定文件夹/abc下所有内容
hadoop fs -rmr /abc
(12)查看目录下所有文件大小
查看目录/abc下所有文件大小
hadoop fs -du /abc
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。