hadoop、spark配置使用所遇到的问题

1 配置Hadoop

1.1 节点、主机ip信息

hostname ip地址 备注
ss-ubuntu 192.168.1.101 namenode
yhc-VirtualBox 192.168.1.102 datanode
node1 192.168.1.103 datanode,secondary namenode
node2 192.168.1.104 datanode
node3 192.168.1.105 datanode

将这些信息放入 /etc/hosts中,将master节点的ssh公钥id_rsa.pub通过scp发给各个slave,将这个id_rsa.pub写入slave中的~/.ssh/authorized_keys中,这个公钥也得写入master自己的authorized_keys中,因为hadoop使用ssh连接所有节点,这样就实现了免密登录

1.2 配置文件

hdfs-site.xml

<configuration>
  <property>
      <name>dfs.replicationname>
      <value>3value>
  property>
  <property>
      <name>dfs.namenode.secondary.http-addressname>
      <value>node1:50090value>  这个是第二个命名节点的http端口设置,node1会用过hosts文件来解析为IP地址
  property>
  <property>
      <name>dfs.namenode.name.dirname>  namenode的文件结构和命名储存位置
      <value>file:/usr/local/hadoop/tmp/dfs/namevalue>
  property>
  <property>
      <name>dfs.datanode.data.dirname>  datanode的数据文件储存位置
      <value>file:/usr/local/hadoop/tmp/dfs/datavalue>
  property>
configuration>

core-site.xml

<configuration>
    <property>
        <name>hadoop.tmp.dirname>
        <value>file:/usr/local/hadoop/tmpvalue>
        <description>Abase for other temporary directories.description>
    property>
    <property>
        <name>fs.defaultFSname>
        <value>hdfs://ss-ubuntu:9000value>  表示hdfs的访问地址端口
    property>
configuration>

mapred-site.xml

<configuration>
  <property>
      <name>mapreduce.framework.namename>
      <value>yarnvalue>
  property>
  <property>
      <name>mapreduce.jobhistory.addressname>
      <value>ss-ubuntu:10020value>  一个任务历史的记录器
  property>
  <property>
      <name>mapreduce.jobhistory.webapp.addressname>
      <value>ss-ubuntu:19888value>记录器的web端口
  property>
configuration>

yarn-site.xml

<configuration>


    <property>
        <name>yarn.nodemanager.aux-servicesname>
        <value>mapreduce_shufflevalue>
    property>
    <property>
        <name>yarn.resourcemanager.hostnamename>
        <value>ss-ubuntuvalue>
    property>
configuration>

配置好后,进入/hadoop/sbin里启动

./start-dfs.sh
./start-yarn.sh
./mr-jobhistory-daemon.sh start historyserver

如果遇到错误,去/hadoop/logs找到对应日志文件,根据日志文件来google

遇到的问题

1. 报错出现50010端口占用

sudo lsof -i:端口号 可以看到指定端口号的使用情况
kill -9 pid 对占用这个端口号的进程发送SIGKILL即exit信号,不会被阻塞,能够顺利杀掉进程

ls: `.’: No such file or directory

使用命令hdfs dhs -ls时出现,因为ls默认去访问

/user/此时用户名

所以新建这些目录

hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/ss

2. 执行start-dfs.sh显示需要填写密码

这是因为它默认使用你此时的用户名来ssh其他节点主机,比如你现在的用户名是ss,某一节点主机名是node1,则start-dfs.sh会执行ssh ss@node1,如果node1上面没有ss这个用户,或者没有将用户ss免密码登录就会出现这种情况

3. 执行start-dfs.sh显示,Error: JAVA_HOME is not set.

因为没有设置JAVA_HOME这个环境变量,读取环境变量的操作主要是在hadoop-env.sh中执行。加入环境变量

export JAVA_HOME=/usr/lib/jvm/default-java

上面的那个路径是我电脑中的路径,因为我是用下面的方式安装的

sudo apt-get install -y default-jdk

4. Spark master无法执行,而且无java虚拟机报错,而slaves可以执行显示Worker

问题是我在Spark的conf/slaves文件中将master的hostname也写进去了,这样又做master和worker就会冲突

5. 执行start-all.sh出错,错误:Exception in thread “main” java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

这是因为在Spark的conf/spark-env.sh中没有配置hadoop classpath在其中添加下面这一句

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)

/usr/local/hadoop是我的hadoop安装目录

6. 使用pyspark报错,pyspark Error: A JNI error has occurred, please check your installation and try again

这是因为我在pycharm张总直接运行是不对的,要将这个py文件,使用spark目录下/bin/spark-submit –master spark://192.168.1.101:7077 test.py来提交给集群运行,在test.py后面可以添加程序的参数

7. 安装pyspark,直接用spark目录下python

在python目录中使用命令

sudo python setup.py install

如果用pip装会很慢

8. historyserver无法通过端口来访问

使用./mr-jobhistory-daemon.sh start historyserver来打开,却不能通过http://ss-ubuntu:10020来打开,后面通过日志mapred-ss-historyserver-ss-ubuntu.log发现原来是因为端口占用,因为配置文件中需要给jobhistory配置端口,也要给jobhistory.webapp配置端口,网上的教程是两个端口一样,这样会引起冲突,所以将jobhistory.webapp改为其他端口就行了

你可能感兴趣的:(Linux)