前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Logstash6整合Hadoop

Logstash6整合Hadoop

作者头像
WindCoder
发布2020-01-21 16:27:42
5430
发布2020-01-21 16:27:42
举报
文章被收录于专栏:WindCoderWindCoder

前提

本文是之前elk的后续,故默认已搭建好logstash等elk相关环境。侧重点是Hadoop安装以及其与logstash的Output插件的整合。ELK的搭建可见:ELK实时日志管理-系统搭建

假设存在两台服务器并处于同一局域网中,分别是192.168.0.79和192.168.0.80,系统均是CentOS7,且均已安装Java 8。

  • ELK系统已部署在192.168.0.79
  • Hadoop将部署于192.168.0.80

原则Hadoop集群需要ssh免密登陆配置,以便操作节点的启动与停止,这里暂不涉及此方面需求,故舍去。相关的可在 官方文档-Hadoop: Setting up a Single Node Cluster. 查看。

下载并解压Hadoop

可从官方 Apache Download Mirrors获取链接下载。本文下载的为Hadoop-2.8.5:

代码语言:javascript
复制
wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.8.5/hadoop-2.8.5.tar.gz

完成后解压文件:

代码语言:javascript
复制
tar -zxvf hadoop-2.8.5.tar.gz

得到hadoop-2.8.5文件夹

配置

进入解压后的hadoop-2.8.5文件夹:

代码语言:javascript
复制
cd hadoop-2.8.5

etc/hadoop/hadoop-env.sh

编辑etc/hadoop/hadoop-env.sh配置一些默认项,这里主要是设置 JAVA_HOME,即填写完整的 Java 安装路径。

代码语言:javascript
复制
vi etc/hadoop/hadoop-env.sh

注释掉原来的

代码语言:javascript
复制
# export JAVA_HOME=${JAVA_HOME}

192.168.0.80的Java安装目录为/home/parim/apps/jdk1.8.0_181,故添加:

代码语言:javascript
复制
export JAVA_HOME=/home/parim/apps/jdk1.8.0_181

若是需要搭建Local (Standalone) Mode,通过如下命令启动即可:

代码语言:javascript
复制
bin/hadoop

本文需要搭建Pseudo-Distributed Operation,故需要继续配置其他文件。

etc/hadoop/core-site.xml

该文件中有两个参数需要设置:

  1. fs.defaultFS - 默认文件系统的名称,端口号可自定义
  2. hadoop.tmp.dir - 其他临时目录的根目录 打开core-site.xml文件:
代码语言:javascript
复制
vi etc/hadoop/core-site.xml

拷贝以下所有行的内容放入到标签 <configuration></configuration> 中间。

代码语言:javascript
复制
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://192.168.0.80:54310</value>
</property>

<property>
  <name>hadoop.tmp.dir</name>
  <value>/home/parim/apps/hadoop-2.8.5/tmp-data</value>
  <description>Parent directory for other temporary directories.</description>
</property>

fs.defaultFS

默认文件系统的名称,本身是一个URL,其方案和权限决定了FileSystem的实现。

  • 此URL的方案(scheme )确定命名FileSystem 实现类的配置属性(fs.SCHEME.impl)。
  • 此URL的权限(authority )用于确定文件系统的主机,端口等。
  • fs.defaultFS是旧版本fs.default.name的代替,在新版中fs.default.name已被弃用。 参考core-default.xml#fs.defaultFS
hadoop.tmp.dir

hadoop.tmp.dir的目录默认指向的是:/tmp/hadoop-${USERNAME}

这样会有个问题,系统重启时会自动删除/tmp目录下的文件,导致你之前对hadoop做的很多

操作都被删除了,需要重新再来,比如你想hdfs导入的文件会都被删除。

参考:

  1. Hadoop安装
  2. hadoop修改hadoop.tmp.dir

etc/hadoop/hdfs-site.xml

这里有两个参数需要配置:

  1. dfs.replication - 默认备份(块复制,block replication)。创建文件时可以指定实际的备份数。如果未在创建时指定备份,则使用默认值。hdfs-default.xml#dfs.replication
  2. dfs.datanode.hostname - datanode默认的hostname,这个不是必须的,因为这里是两台服务器之间传递信息,所以需要配置,否则会导致后面的读写操作异常。

打开hdfs-site.xml文件:

代码语言:javascript
复制
vi etc/hadoop/hdfs-site.xml

拷贝以下所有行的内容放入到标签 <configuration></configuration> 中间。

代码语言:javascript
复制
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>

    <property>
        <name> dfs.datanode.hostname</name>
        <value>192.168.0.80</value>
    </property>

启动单节点伪分布式集群

以下为在本地运行一个MapReduce job的实现,由于不是必须运行在YARN上,故暂且没配置与启动YARN。

格式化HDFS

在第一使用 Hadoop 之前,需要先格式化 HDFS,使用下面的命令

代码语言:javascript
复制
bin/hdfs namenode -format

若有需要选择的,输入按提示Y即可。

启动单节点集群

使用以下命令启动cHadoop 的单节点集群(使用对应的用户来启动),如下:

代码语言:javascript
复制
sbin/start-dfs.sh

若该用户之前设置了免密登录,此处可免去多次输入密码的操作,反之则需要根据提示多次输入登录密码。

检测运行

可以使用 'jps' 工具/命令, 验证是否所有 Hadoop 相关的进程正在运行。

代码语言:javascript
复制
/home/parim//apps/jdk1.8.0_181/bin/jps

如果 Hadoop 成功启动,那么 jps 输出应显示: NameNode, SecondaryNameNode, DataNode.

访问

可通过web访问NameNode,默认链接如下:

代码语言:javascript
复制
 http://localhost:50070/

创建HDFS目录

创建执行 MapReduce jobs所需要的HDFS目录:

代码语言:javascript
复制
 bin/hdfs dfs -mkdir /user
 # bin/hdfs dfs -mkdir /user/<username>,username即启动Hadoop的用户名,这里假设为parim
 bin/hdfs dfs -mkdir /user/parim

测试

  1. 将Hadoop的logs文件夹中的文件复制到分布式文件系统中:
代码语言:javascript
复制
bin/hdfs dfs -put logs logstash

默认会在HDFS中的/user/parim下创建logstash文件夹并向其写入logs中的文件,若未执行上面创建目录操作,会报无法找到/user/parim的错误。

  1. 查看分布式文件系统上logstash中的文件:
代码语言:javascript
复制
 bin/hdfs dfs -cat logstash/*

停止/关闭 Hadoop

当需要停止时可执行如下命令

代码语言:javascript
复制
sbin/stop-dfs.sh

如果用户不是ssh免密码登录,此时需要再多次输入登录密码

Logstash输出到Hadoop

上面是Hadoop安装到操作的基本流程,接下来转到192.168.0.79配置Logstash到Hadoop的输出。

Logstash6的Output plugins有webhdfs,其作用是使用webhdfs REST API将Logstash事件发送到HDFS。

默认Logstash启动配置文件为01-logstash-initial.conf,进入Logstash安装目录并打开文件:

代码语言:javascript
复制
vi config/01-logstash-initial.conf

在output部分追加如下内容:

代码语言:javascript
复制
webhdfs {
    # hdfs的namenode地址
    host => "192.168.0.80"  
    # Hadoop的webhdfs使用的端口
    port => 50070     
    # hadoop运行的用户,以这个用户的权限去写入hdfs    
    user => "parim"
    # 按年月日建log文件
    path => "/user/parim/logstash-data/logstash-%{+YYYY}-%{+MM}-%{+dd}.log"
    codec => "json"
    flush_size => 5000
    idle_flush_time => 5
    retry_interval => 3
}

保存后,重启Logstash即可。

放行端口

为了Logstash与Hadoop通信, 192.168.0.80的Hadoop默认配置下,需要放行端口50070和50075,此处是基于firewall防火墙下的命令:

代码语言:javascript
复制
sudo firewall-cmd --zone=public --add-port=50070/tcp --permanent
sudo firewall-cmd --zone=public --add-port=50075/tcp --permanent
sudo firewall-cmd --reload

访问http://192.168.0.80:50070可见如下,当看到logstash-data文件夹时,说明整合成功:

进入logstash-data下载里面的log文件,打开可见类似记录:

代码语言:javascript
复制
{"source":"/home/parim/apps/nginx-1.10/logs/access.log","@version":"1","learner_type":"exam","tags":["beats_input_codec_plain_applied"],"type":"logs","offset":1656526468,"beat":{"version":"6.4.0","hostname":"dev.windcoder.com","name":"dev.windcoder.com"},"@timestamp":"2018-09-29T01:45:53.093Z","input":{"type":"log"},"prospector":{"type":"log"},"read_timestamp":"2018-09-29T01:45:53.093Z","nginx":{"access":{"client_ip":"192.168.0.221","method":"GET","body_sent":{"bytes":"0"},"referer":"http://sd.windcoder.com/learner/course/detail/1423705","x_forwarded":"121.69.9.234","msec":"[1538185552.664]","user_name":"-","cookie_sid":"-","time_iso8601":"2018-09-29T09:45:52+08:00","url":"/api/learner/exam/myExam/examList","user_agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36","http_version":"1.0","response_code":"302"}},"host":{"name":"dev.windcoder.com"}}

Hadoop与Java版本

Hadoop

Java

2.7及以后版本

Java 7 +

2.6及以前版本

Java 6 +

HadoopJavaVersions

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提
  • 下载并解压Hadoop
  • 配置
    • etc/hadoop/hadoop-env.sh
      • etc/hadoop/core-site.xml
        • fs.defaultFS
        • hadoop.tmp.dir
      • etc/hadoop/hdfs-site.xml
      • 启动单节点伪分布式集群
        • 格式化HDFS
          • 启动单节点集群
            • 访问
              • 创建HDFS目录
                • 测试
                  • 放行端口
              • 停止/关闭 Hadoop
              • Logstash输出到Hadoop
              • Hadoop与Java版本
              相关产品与服务
              大数据
              全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档