Data Collector环境配置

Data Collector包括几个环境变量,您可以对其进行修改以定制以下区域:

  • Data Collector目录
  • 用于将Data Collector作为服务启动的用户和组
  • Java配置选项
  • 限制用户库的运行时权限的安全管理器
  • 要添加到根类加载器的JAR文件的路径
  • 堆转储的创建和文件位置
注意: Data Collector还包含一个不应修改的SPARK_KAFKA_VERSION环境变量。仅当您在Cloudera CDH集群上运行集群流模式管道时,才使用此变量。有关更多信息,请参阅Kafka集群要求。

修改环境变量

用来修改环境变量的方法取决于Data Collector安装类型:

压缩包安装,从命令行手动启动
在任何操作系统上从命令行手动启动Data Collector时,请编辑 $SDC_DIST/libexec/sdc-env.sh文件以修改环境变量。

使用文本编辑器编辑sdc-env.sh文件。文件中的某些环境变量已被注释掉,并且不反映默认值。更改变量值时,请确保取消注释该行。

编辑文件后,从命令提示符处重新启动Data Collector以启用更改。

注意:修改环境变量后,请勿从用户界面重新启动Data Collector
压缩包或RPM安装,在使用SysV init系统的操作系统上作为服务启动
当您在CentOS 6,Oracle Linux 6,Red Hat Enterprise Linux 6或Ubuntu 14.04 LTS上将Data Collector作为服务启动时,请编辑$SDC_DIST/libexec/sdcd-env.sh文件以修改环境变量。

使用文本编辑器编辑sdcd-env.sh文件。

编辑文件后,重新启动Data Collector以启用更改。

压缩包或RPM安装,在使用systemd init系统的操作系统上作为服务启动
当您在CentOS 7,Oracle Linux 7,Red Hat Enterprise Linux 7或Ubuntu 16.04 LTS上将Data Collector作为服务启动时,请编辑sdc.service文件以修改环境变量。
sdc.service文件的位置取决于您如何安装Data Collector

  • 从RPM软件包- /usr/lib/systemd/system/sdc.service
  • 从压缩包- /etc/systemd/system/sdc.service

sdc.service使用与覆盖systemd init系统上的单元配置文件相同的过程覆盖文件中的缺省值 。有关示例,请参见systemd.unit联机帮助页中的 “示例2.覆盖供应商设置” 。

覆盖缺省值后,使用以下命令重新加载systemd管理器配置:

systemctl daemon-reload

然后重新启动Data Collector以启用更改。

Cloudera Manager安装
通过Cloudera Manager 安装Data Collector时,通过Cloudera Manager配置StreamSets服务来修改环境变量。

Data Collector目录

Data Collector包括了定义用于存储配置、数据、日志和资源文件的目录的环境变量。

SDC_DIST环境变量定义Data Collector运行时目录。运行时目录是基本Data Collector目录,用于存储可执行文件和相关文件。在安装过程中设置此环境变量。

手动启动Data Collector时,其余目录变量的默认值是相对于 $SDC_DIST运行时目录的。当您将Data Collector作为服务启动时,其余目录变量的默认值是$SDC_DIST运行时目录外部的绝对路径。

使用安装类型所需的方法来修改环境变量。

您可以配置以下定义目录的环境变量:

环境变量 描述
SDC_CONF

定义Data Collector配置文件sdc.properties,和相关领域属​​性文件和密钥库文件的配置目录。还包括logj4属性文件。

默认值:

  • 手动启动: $SDC_DIST/etc
  • 服务启动: /etc/sdc
SDC_DATA

定义管道配置和运行详细信息的数据目录。

默认值:

  • 手动启动: $SDC_DIST/data
  • 服务启动: /var/lib/sdc
SDC_LOG

定义日志目录。

默认值:

  • 手动启动: $SDC_DIST/log
  • 服务启动: /var/log/sdc
SDC_RESOURCES 定义运行时资源文件的目录。

默认值:

  • 手动启动: $SDC_DIST/resources
  • 服务启动: /var/lib/sdc-resources

服务启动的用户和组

当您将Data Collector作为服务运行时,Data Collector将以环境变量中定义的系统用户帐户和组身份运行。默认的系统用户和组名为sdc。

您可以修改环境变量的值以指向另一个系统用户或组。

使用安装类型所需的方法来修改环境变量。

如果更改系统用户,则必须使新系统用户成为所有Data Collector目录的所有者:

  • $SDC_DIST
  • $SDC_CONF
  • $SDC_DATA
  • $SDC_LOG
  • $SDC_RESOURCES

例如,如果将系统用户和组更改为myuser,请使用以下命令将配置目录$SDC_CONF的所有者以及目录中的所有文件更改为 myuser:myuser

chown -R myuser:myuser /etc/sdc
注意: 手动运行Data Collector时, 运行启动命令时,Data Collector将以登录到命令提示符下的系统用户帐户运行。要以另一个用户帐户运行,请参阅“完全安装和启动(手动启动)”。

Java配置选项

您可以在环境变量中定义Data Collector使用的Java配置选项。

对于压缩包或RPM安装,请在以下环境变量中定义Java配置选项:

  • SDC_JAVA_OPTS – 包括Java的配置选项。
  • SDC_JAVA8_OPTS – 包括特定于Java 8的配置选项。

Data Collector将加载特定于版本的环境变量的值,并将其添加到SDC_JAVA_OPTS环境变量中。

在定义Java配置选项时,请避免定义重复的选项。如果您确实定义了重复项,那么传递给JVM的最后一个选项通常优先。

对于Cloudera Manager安装,请通过Cloudera Manager配置StreamSets服务来定义Java配置选项。

注意:要修改Data Collector命令行界面的Java配置选项,请使用SDC_CLI_JAVA_OPTS环境变量。有关更多信息,请参见Cli命令的Java配置选项。

Java堆大小

根据主机上可用的资源,根据需要增加或减少Data Collector Java堆大小。默认情况下,Java堆大小为1024 MB。

Java堆大小确定分配给Data Collector的堆大小,并影响Data Collector在运行管道时可以使用的内存量。运行管道最多可以使用分配的堆大小的65%。

使用以下Java选项来定义Java堆大小:

  • Xmx – 定义最大堆大小。
  • Xms – 定义最小堆大小。
提示:为避免不断重新计算分配的堆大小,请将两个属性设置为相同的值。要定义度量单位,请为MB使用m,为GB使用g。
根据您的安装定义堆大小:
压缩包或RPM安装

在SDC_JAVA_OPTS环境变量中定义堆大小。
例如,要使堆大小增加一倍,请按如下所示增加Xmx和Xms设置:

export SDC_JAVA_OPTS="${SDC_JAVA_OPTS} -Xmx2048m -Xms2048m -server"

使用安装类型所需的方法来修改环境变量。

Cloudera Manager安装
在Cloudera Manager中的StreamSets服务的sdc-env.sh字段的Data Collector高级配置代码片段(安全阀)中定义堆大小。
例如,要将堆大小增加一倍,请将以下内容添加到 sdc-env.sh安全阀中:
export SDC_JAVA_OPTS="-Xmx2048m -Xms2048m"

使用2048 MB的堆大小,您可以将管道配置为使用多达65%的内存,即1331 MB的内存。

注意:在管道属性中,可以使用jvm:maxMemoryMB() 函数来帮助定义管道使用的堆大小的百分比。

远程调试

您可以启用远程调试来调试在远程计算机上运行的Data Collector实例。

根据您的安装启用远程调试:

压缩包或RPM安装

在SDC_JAVA_OPTS环境变量中定义调试选项。

将以下调试选项添加到环境变量中,该变量 port_number是运行Data Collector的远程计算机上的开放端口号:

-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=<port_number>,suspend=n

例如,要在使用端口号2005的远程计算机上调试Data Collector,请如下定义SDC_JAVA_OPTS:

export SDC_JAVA_OPTS="${SDC_JAVA_OPTS} -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=2005,suspend=n"

使用安装类型所需的方法来修改环境变量。

Cloudera Manager安装
在Cloudera Manager中的StreamSets服务的Java Options属性中定义调试选项。
例如,要在使用端口号2005的远程计算机上调试Data Collector,请将调试选项添加到属性中,如下所示:

-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=2005,suspend=n

垃圾收集器

您可以定义Data Collector使用的Java垃圾收集。默认情况下,Data Collector使用并发标记扫描(CMS)垃圾收集器。

例如,如果将Data Collector配置为使用大的堆大小,则可能要使用G1垃圾收集器。如果定义另一个垃圾收集器,请在生产环境中进行相同更改之前测试并评估Data Collector性能。垃圾收集器的性能取决于每个特定的用例。

根据您的安装定义垃圾收集器:

压缩包或RPM安装
在SDC_JAVA8_OPTS环境变量中定义垃圾收集器。

例如,默认的垃圾收集器定义如下:

export SDC_JAVA8_OPTS=${SDC_JAVA8_OPTS:-"-XX:+UseConcMarkSweepGC -XX:+UseParNewGC"}

要使用G1垃圾收集器,请如下设置选项:

export SDC_JAVA8_OPTS=${SDC_JAVA8_OPTS:-"-XX:+UseG1GC"}

使用安装类型所需的方法来修改环境变量。

Cloudera Manager安装
在Cloudera Manager中的StreamSets服务的sdc-env.sh字段的Data Collector Advanced Configuration Snippet(安全阀)字段中定义垃圾收集器。
例如,要使用G1垃圾收集器,请将以下内容添加到 sdc-env.sh安全阀中:

 export SDC_JAVA8_OPTS="-XX:+UseG1GC"

日志

默认情况下,Data Collector启用垃圾收集器日志记录,以方便进行故障排除。日志文件被写入$SDC_LOG/gc.log。您可以禁用日志记录。

根据您的安装禁用垃圾收集器日志记录:

压缩包或RPM安装
将SDC_GC_LOGGING环境变量设置为false。例如:
export SDC_GC_LOGGING=false

使用安装类型所需的方法来修改环境变量。

Cloudera Manager安装
在Cloudera Manager中StreamSets服务的sdc-env.sh字段的Data Collector高级配置代码段(安全阀)中,将SDC_GC_LOGGING环境变量设置为false 。
例如,将以下内容添加到sdc-env.sh安全阀中:

export SDC_GC_LOGGING=false

安全管理器

Data Collector包括一个默认启用的Java安全管理器。为了增强安全性,您可以启用Data Collector安全管理器,以防止阶段访问受保护的Data Collector目录中的文件。

Data Collector可以使用以下安全管理器之一:
Java安全管理器

默认情况下,Data Collector使用Java安全管理器。Java安全管理器限制用户库的运行时权限。这使管理员可以控制生产系统上的用户库操作。例如,默认情况下,用户库无法调用网络资源,并可能导致拒绝服务(DDoS)攻击。

安全策略在$SDC_CONF/sdc-security.policy文件中定义。文件语法是Java标准的

Data Collector安全管理器
为了增强安全性,请启用Data Collector安全管理器。该Data Collector安全管理器可防止阶段访问数据采集器的目录下受保护的文件,无论 sdc-security.policy文件中如何定义。
要启用Data Collector安全管理器,请取消注释Data Collector配置文件 $SDC_CONF/sdc.properties中的security_manager.sdc_manager.enable属性。

注意:如果使用旧版JVM,则Data Collector安全管理器可能会遇到一些JVM已知问题。

如果需要,可以通过将SDC_SECURITY_MANAGER_ENABLED环境变量设置为false来配置Data Collector不使用任何安全管理器。

使用安装类型所需的方法来修改环境变量。

受保护的目录

当Data Collector安全管理器被启用,以下Data Collector目录是受保护目录:

  • $SDC_CONF – 阶段无法访问配置目录中的文件。
  • $SDC_DATA – 阶段无法访问数据目录中的文件。
  • $SDC_RESOURCES – 阶段可以读取资源目录中的文件,但不能写入目录中的文件。

如果需要,可以通过修改Data Collector配置文件$SDC_CONF/sdc.properties 中的Data Collector安全管理器例外属性,允许阶段访问这些受保护目录中的特定文件。但是,在配置这些受保护目录的例外时请格外小心。

您可以按如下方式配置受保护目录的例外:

所有阶段库的例外
要允许所有阶段库访问受保护目录中的文件,请修改security_manager.sdc_dirs.exceptions属性以定义可以访问的文件。
特定阶段库的例外
要允许特定的阶段库访问受保护目录中的文件,请添加以下属性,然后定义阶段库可以访问的文件:

security_manager.sdc_dirs.exceptions.<stage_library_name>=<file_path>
例如,默认的Data Collector配置文件包括Java密钥库凭证存储阶段库的异常,定义如下:

security_manager.sdc_dirs.exceptions.lib.streamsets-datacollector-jks-credentialstore-lib=$SDC_CONF/jks-credentialStore.pkcs12

当您配置安全管理例外属性,使用适当的目录环境变量$SDC_CONF$SDC_DATA或 $SDC_RESOURCES中的文件路径:。您可以输入多个文件路径,以逗号分隔。

 

根类加载器

您可以编辑SDC_ROOT_CLASSPATH环境变量,以定义要添加到Data Collector根类加载器的JAR文件的路径。

将变量用于必须在根类加载器中的组件,例如Snappy。默认值为$SDC_DIST/root-lib/'*'

使用安装类型所需的方法来修改环境变量。

 

堆转储创建

默认情况下,当Data Collector 遇到内存不足错误(OOME)时,它将创建一个堆转储。

默认情况下,堆转储文件被写入SDC_LOG环境变量中定义的文件,并使用允许生成多个堆转储文件的命名约定,如下所示:$SDC_LOG/sdc_heapdump_${timestamp}.hprof

您可以更改堆转储文件的名称,但是我们建议使用 ${timestamp}或类似变量来确保堆转储名称是唯一的。

请注意,Java虚拟机以及由此Data Collector不会覆盖现有的堆转储文件。例如,如果将 $SDC_LOG/sdc_heapdump.hprof用作文件名,则在Data Collector 创建第一个堆转储文件后,除非删除现有文件,否则它将不会创建另一个堆转储文件。

注意:根据生成的堆转储文件的数量和大小,您可能需要增加Data Collector Java堆大小。
您可以配置以下堆转储环境变量:
堆转储环境变量 描述
SDC_HEAPDUMP_ON_OOM 指定Data Collector是否在遇到内存不足错误时生成堆转储。

默认为true。

SDC_HEAPDUMP_PATH 指定用于堆转储文件的文件名和位置。

默认情况下,堆转储写入 $SDC_LOG/sdc_heapdump_${timestamp}.hprof

要指定其他文件名或位置,请取消注释该属性,然后输入要使用的位置和文件名。

提示:要将多个堆转储文件写入目录,请使用函数或变量来确保文件名是唯一的。如果目录中存在相同名称的文件,则Data Collector不会创建新的堆转储文件。

使用安装类型所需的方法来修改环境变量。