使用flume问题总结1——搭建flume+测试Syslog source

来源:互联网 发布:淘宝号可以改名字吗 编辑:程序博客网 时间:2024/06/05 20:15

搭建flume

  1. 先安装JDK:参考http://wenku.baidu.com/link?url=QnE9lgoCkS2OoILGeHim7uonsth5LwiGB3IWKOnNirSE6qEOaNgdW4-DDWR2XKKoX0X8aLIbjDD0i_z4BeXh4VA_AEScZhrxvz_9BucO-Ze
  2. 下载flume,目前最新版本1.6.0:链接http://flume.apache.org/download.html
  3. 安装flume:参考http://wenku.baidu.com/link?url=LS_fM5ifOAiHumoqaZUd9G42P9vAlvePdsQsdE7FcniaGHTMuWt1LJ5SZaA6yQBq3p9jxtp9lt81n39627kNT8fxFx7EGK8WfFS_mUt5WGG
  4. 我的环境变变量的设置:文件/etc/profile
  5. [html] view plaincopy
    1. if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ]; then  
    2.     INPUTRC=/etc/inputrc  
    3. fi  
    4.   
    5. export JAVA_HOME=/opt/jdk/jdk1.6.0_45  
    6. export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin  
    7. export CLASSPATH=.:/opt/jdk/jdk1.6.0_45/lib:/opt/jdk/jdk1.6.0_45/jre/lib:$CLASSPATH  
    8. export FLUME_HOME=/usr/local/flume  
    9. export PLUME_LOG_DIR=$FLUME_HOME/log  
    10. export PATH=$PATH:$FLUME_HOME/bin  
    11.   
    12. export KAFKA_HOME=/usr/local/kafka  
    13. export PATH=$PATH:$KAFKA_HOME/bin  
    14.   
    15. export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC  

测试

  1. 链接中有很多测试案例,可用于测试flume安装是否成功,并且初步了解各种source的使用方式以及区别:http://www.aboutyun.com/thread-8917-1-1.html
  2. 上面博文中测试用例都是用命令行的方式实现的,实际开发中我们需要编写自己的client,与flume source对接

Syslog source

  1. 这篇博文中用使用Java编写了一个客户端(创建socket客户端)之后发送数据,flume配置的source类型为syslog,测试可以运行。链接http://blog.csdn.net/shuijinglianyi/article/details/8492415
  2. 由于业务需求,我的客户端需要用C语言实现。所以尝试着用C编写了一个类似的socket client,但是运行不成功。刚开始以为是跨语言的问题,所以用java编写了socket 服务端与我的C client通信,运行成功,说明不是语言问题。(Java与C之间的socket通信,参考:http://blog.csdn.net/yutianzuijin/article/details/24807417)
  3. 仔细检查后才明白是发送的消息格式不正确,下面是C语言的client代码。
  4. 之前发送的消息之前没有加<4>,然后就发送不成功。猜测:<4>应该是flume event要求的一个固定字段。
  5. 由于刚开始接触flume,event的格式还不是很明白,关于为什么消息前面必须加<4>,在下一篇博文中说明。
  6. [cpp] view plaincopy
    1. #include <stdio.h>  
    2. #include <stdlib.h>  
    3. #include <arpa/inet.h>  
    4. #include <sys/types.h>  
    5. #include <sys/socket.h>  
    6. #include <unistd.h>  
    7. #include <netinet/in.h>  
    8. #include <netdb.h>  
    9. #include <string.h>  
    10. #include <errno.h>  
    11.   
    12. int main()  
    13. {  
    14.     int sock_id;  
    15.     char send_buf3[] = "<4>helloworld\nnihao\n";  // 要发送给服务器的信息  
    16.     char server_addr[16] = "127.0.0.1";//服务器IP地址  
    17.     int server_port = 5496;//服务器分配的端口号  
    18.     struct sockaddr_in servaddr;//服务器的地址信息  
    19.     bzero(&servaddr,sizeof(servaddr));  
    20.     //读取IP地址  
    21.     servaddr.sin_family = AF_INET ;  
    22.     servaddr.sin_addr.s_addr = inet_addr(server_addr);  
    23.     servaddr.sin_port = htons(server_port);  
    24.     //创建TCP流式socket  
    25.     sock_id = socket(AF_INET,SOCK_STREAM,0);  
    26.     if(sock_id == -1){  
    27.             perror("socket() failed");  
    28.             return -1;  
    29.     }  
    30.     //与服务器建立连接  
    31.     if(connect(sock_id,(struct sockaddr *)&servaddr,sizeof(servaddr)) != 0){  
    32.         perror("connect() failed");  
    33.         return -1;  
    34.     }  
    35.   
    36.     int send_len = send(sock_id,send_buf3,100,0);  
    37.     //printf("send_len=%d\n",send_len);  
    38.     if(send_len < 0){  
    39.         perror("send() failed");  
    40.     }  
    41.     printf("send_len=%d\n",send_len);  
    42.   
    43.     close(sock_id);  
    44.   
    45.     return 0;  
    46. }  
0 0
原创粉丝点击