部署Storm构建JAR(Deploying Storm build JAR)
我开发了一个Java类,它从Kafka队列中读取数据并将其打印出来
ZkHosts zkHosts=new ZkHosts("localhost:2181"); String topic_name="test"; String consumer_group_id="storm"; String zookeeper_root=""; SpoutConfig kafkaConfig=new SpoutConfig(zkHosts, topic_name, zookeeper_root, consumer_group_id); kafkaConfig.scheme=new SchemeAsMultiScheme(new StringScheme()); /*kafkaConfig.forceFromStart=false; kafkaConfig.startOffsetTime =-2;*/ KafkaSpout kafkaSpout = new KafkaSpout(kafkaConfig); TopologyBuilder builder=new TopologyBuilder(); //builder.setSpout("KafkaSpout", kafkaSpout, 1); builder.setSpout("KafkaSpout", kafkaSpout); builder.setBolt("PrinterBolt", new PrinterBolt()).globalGrouping("KafkaSpout"); Map<String, Object> conf = new HashMap<String, Object>(); conf.put(Config.TRANSACTIONAL_ZOOKEEPER_PORT, 2181); conf.put(Config.TRANSACTIONAL_ZOOKEEPER_SERVERS, Arrays.asList("localhost")); conf.put(Config.STORM_ZOOKEEPER_SESSION_TIMEOUT, 20000); conf.put(Config.STORM_ZOOKEEPER_CONNECTION_TIMEOUT, 20000); conf.put(Config.STORM_ZOOKEEPER_RETRY_TIMES, 3); conf.put(Config.STORM_ZOOKEEPER_RETRY_INTERVAL, 30); LocalCluster cluster=new LocalCluster(); try{ cluster.submitTopology("KafkaConsumerTopology", conf, builder.createTopology()); Thread.sleep(120000); }catch (Exception e) { //throw new IllegalStateException("Couldn't initialize the topology", e); System.out.println(e.getMessage()); }
在编码之后,我正在将Maven构建为JAR文件并将jar移动到Amazon AWS集群
- 然后像
nohup java -cp uber-***-0.0.1-SNAPSHOT.jar com.***.&&&.kafka.App
一样运行命令nohup java -cp uber-***-0.0.1-SNAPSHOT.jar com.***.&&&.kafka.App
但是我在这里面临一个错误,有人能告诉我在部署中我做了什么错误吗? 我在想我必须这样做:
- 我需要在strom配置文件夹中部署这个jar文件,我需要吗? 但我确实将jar放在AWS的单独文件夹中(不在storm文件夹中)
- 如何看待系统输出
- 我是否需要在项目中包含任何yml文件?
请查看以下异常:
29537 [Thread-14-KafkaSpout] ERROR backtype.storm.util - Async loop died! java.lang.ExceptionInInitializerError: null at org.apache.log4j.Logger.getLogger(Logger.java:39) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.utils.Logging$class.logger(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.network.BlockingChannel.logger$lzycompute(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.network.BlockingChannel.logger(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.utils.Logging$class.debug(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.network.BlockingChannel.debug(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.network.BlockingChannel.connect(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.consumer.SimpleConsumer.connect(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.consumer.SimpleConsumer.getOrMakeConnection(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.consumer.SimpleConsumer.kafka$consumer$SimpleConsumer$$sendRequest(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.consumer.SimpleConsumer.getOffsetsBefore(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.javaapi.consumer.SimpleConsumer.getOffsetsBefore(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.KafkaUtils.getOffset(KafkaUtils.java:77) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.KafkaUtils.getOffset(KafkaUtils.java:67) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.PartitionManager.<init>(PartitionManager.java:83) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.ZkCoordinator.refresh(ZkCoordinator.java:98) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.ZkCoordinator.getMyManagedPartitions(ZkCoordinator.java:69) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.KafkaSpout.nextTuple(KafkaSpout.java:135) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at backtype.storm.daemon.executor$fn__3373$fn__3388$fn__3417.invoke(executor.clj:565) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at backtype.storm.util$async_loop$fn__464.invoke(util.clj:463) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at clojure.lang.AFn.run(AFn.java:24) [uber-iot-0.0.1-SNAPSHOT.jar:na] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_66] Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details. at org.apache.log4j.Log4jLoggerFactory.<clinit>(Log4jLoggerFactory.java:49) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] ... 22 common frames omitted
I developed a Java class which reads data from Kafka queue and prints it out
ZkHosts zkHosts=new ZkHosts("localhost:2181"); String topic_name="test"; String consumer_group_id="storm"; String zookeeper_root=""; SpoutConfig kafkaConfig=new SpoutConfig(zkHosts, topic_name, zookeeper_root, consumer_group_id); kafkaConfig.scheme=new SchemeAsMultiScheme(new StringScheme()); /*kafkaConfig.forceFromStart=false; kafkaConfig.startOffsetTime =-2;*/ KafkaSpout kafkaSpout = new KafkaSpout(kafkaConfig); TopologyBuilder builder=new TopologyBuilder(); //builder.setSpout("KafkaSpout", kafkaSpout, 1); builder.setSpout("KafkaSpout", kafkaSpout); builder.setBolt("PrinterBolt", new PrinterBolt()).globalGrouping("KafkaSpout"); Map<String, Object> conf = new HashMap<String, Object>(); conf.put(Config.TRANSACTIONAL_ZOOKEEPER_PORT, 2181); conf.put(Config.TRANSACTIONAL_ZOOKEEPER_SERVERS, Arrays.asList("localhost")); conf.put(Config.STORM_ZOOKEEPER_SESSION_TIMEOUT, 20000); conf.put(Config.STORM_ZOOKEEPER_CONNECTION_TIMEOUT, 20000); conf.put(Config.STORM_ZOOKEEPER_RETRY_TIMES, 3); conf.put(Config.STORM_ZOOKEEPER_RETRY_INTERVAL, 30); LocalCluster cluster=new LocalCluster(); try{ cluster.submitTopology("KafkaConsumerTopology", conf, builder.createTopology()); Thread.sleep(120000); }catch (Exception e) { //throw new IllegalStateException("Couldn't initialize the topology", e); System.out.println(e.getMessage()); }
after coding, I am doing Maven build as JAR file and moved the jar to Amazon AWS cluster
- and then running command like
nohup java -cp uber-***-0.0.1-SNAPSHOT.jar com.***.&&&.kafka.App
But I am facing an error here, could anyone tell me what mistake I am doing in deployment?. I am thinking following I have to do:
- I need to deploy this jar file in strom config folder, do I need to? but I did placed the jar in seperate folder in AWS (not in storm folder)
- how to see the sys outs
- do I need to include any yml files in my project?
Please find below exception:
29537 [Thread-14-KafkaSpout] ERROR backtype.storm.util - Async loop died! java.lang.ExceptionInInitializerError: null at org.apache.log4j.Logger.getLogger(Logger.java:39) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.utils.Logging$class.logger(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.network.BlockingChannel.logger$lzycompute(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.network.BlockingChannel.logger(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.utils.Logging$class.debug(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.network.BlockingChannel.debug(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.network.BlockingChannel.connect(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.consumer.SimpleConsumer.connect(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.consumer.SimpleConsumer.getOrMakeConnection(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.consumer.SimpleConsumer.kafka$consumer$SimpleConsumer$$sendRequest(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.consumer.SimpleConsumer.getOffsetsBefore(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at kafka.javaapi.consumer.SimpleConsumer.getOffsetsBefore(Unknown Source) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.KafkaUtils.getOffset(KafkaUtils.java:77) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.KafkaUtils.getOffset(KafkaUtils.java:67) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.PartitionManager.<init>(PartitionManager.java:83) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.ZkCoordinator.refresh(ZkCoordinator.java:98) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.ZkCoordinator.getMyManagedPartitions(ZkCoordinator.java:69) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at storm.kafka.KafkaSpout.nextTuple(KafkaSpout.java:135) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at backtype.storm.daemon.executor$fn__3373$fn__3388$fn__3417.invoke(executor.clj:565) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at backtype.storm.util$async_loop$fn__464.invoke(util.clj:463) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] at clojure.lang.AFn.run(AFn.java:24) [uber-iot-0.0.1-SNAPSHOT.jar:na] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_66] Caused by: java.lang.IllegalStateException: Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError. See also http://www.slf4j.org/codes.html#log4jDelegationLoop for more details. at org.apache.log4j.Log4jLoggerFactory.<clinit>(Log4jLoggerFactory.java:49) ~[uber-iot-0.0.1-SNAPSHOT.jar:na] ... 22 common frames omitted
原文:https://stackoverflow.com/questions/34368293
最满意答案
如果您的模板无效,我建议您在
views.py
中使用它,例如:from django.shortcuts import render, render_to_response def homepage(request): template_name = 'homepage.html' extended_template = 'base_login.html' if request.user.is_authenticated(): extended_template = 'base.html' return render( request, template_name, {'extended_template': extended_template, ...} ) # homepage.html {% extends extended_template %} {% block content %} {% if request.user.is_authenticated %} Hello {{ request.user }} {% endif %} {% endif %}
注意:如果
render
功能仍然不能正常工作,请尝试使用render_to_response
例如这个答案: https : //stackoverflow.com/a/1331183/6396981If your template goes invalid, I suggest you to it at the
views.py
, an example:from django.shortcuts import render, render_to_response def homepage(request): template_name = 'homepage.html' extended_template = 'base_login.html' if request.user.is_authenticated(): extended_template = 'base.html' return render( request, template_name, {'extended_template': extended_template, ...} ) # homepage.html {% extends extended_template %} {% block content %} {% if request.user.is_authenticated %} Hello {{ request.user }} {% endif %} {% endif %}
Note: if function of
render
still doesn't work well, please try withrender_to_response
such as this answer: https://stackoverflow.com/a/1331183/6396981
相关问答
更多-
在搜索代码之前,一定要阅读文档。 http://docs.djangoproject.com/en/1.2/topics/auth/#other-authentication-sources同时阅读提供的Django源代码。 你想创造三件事。 中间件来捕获令牌。 这是大部分工作发生的地方。 它检查令牌,验证它(通过与身份管理器确认),然后登录用户。 验证后端以查找用户。 这是一个存根。 它所做的只是根据需要创建用户。 你的身份管理器有详细信息。 您只是在Django的本地数据库上缓存当前版本的用户。 这是中 ...
-
AMG在他的评论中提到,RightThing(tm)要做的是在你的登录视图中处理表单提交(POST),然后重定向到dashbord主页url(如果表单有效并且登录成功)或者重新显示表单(无重定向),如果表单无效或登录失败。 作为一般规则,这里是处理表单提交的规范方式(除了应该使用GET方法并且从不重定向的搜索表单): def someformview(request, ...): if request.method == "POST": # the user submitted t ...
-
我看到的第一个错误是def create(self, email, password)应该接收参数self和validated_data 。 例如: def create(self, validated_data): """Create a new model instance""" return MyUser.objects.create(**validated_data) 理想情况下,您的序列化程序将包含需要创建此用户实例的所有字段。 The first error that I se ...
-
由于Django使用身份验证后端来获取用户对象,因此在我们调用后端时不知道用户是否会被标记为工作人员。 如指定身份验证后端所述,仍可以通过链接后端为员工和非员工用户使用不同的后端 。 例如,如果您的设置是: AUTHENTICATION_BACKEND = ( 'myapp.auth.StaffUserBackend', 'django.contrib.auth.backends.ModelBackend', ) myapp.auth.StaffUserBackend只能识别员工用 ...
-
1)使用{%debug%}模板标签来理解用户。 https://docs.djangoproject.com/en/dev/ref/templates/builtins/#debug 或者2)使用{%request.user.is_authenticated%}应该从Http请求中获取经过身份验证的用户信息。 1) Use {% debug %} template tag to understand User. https://docs.djangoproject.com/en/dev/ref/templa ...
-
如果您可以在PHP中解开Django在会话中腌制的内容,那么您可以直接从数据库中获取相关会话数据(使用来自cookie的会话ID),然后您将获得用户登录Django站点的直接信息 - 如果有的话。 编辑: 这是Django使用的“加密”: http://code.djangoproject.com/browser/django/tags/releases/1.2.4/django/contrib/sessions/backends/base.py#L86 在“解密”之后你应该得到类似的东西: { ' ...
-
您的字段称为quitter ,而不是owner 。 Thing.objects.filter(quitter=request.user, ....) 为了将来参考,当您收到错误时,您应该将它们发布在问题中。 Your field is called quitter, not owner. Thing.objects.filter(quitter=request.user, ....) For future reference, when you get errors, you should post t ...
-
您可以使用UserPassesTestMixin [Django-doc]和LoginRequiredMixin [Django-doc] mixins,并指定用户应该是is_superuser 。 既然你需要这两次,我们可以先做一个复合mixin: from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin class AdminStaffRequiredMixin(LoginRequiredMixin, ...
-
Django REST框架主要假设请求是基于用户进行身份验证的,但它们确实为身份验证匿名请求提供支持。 但它通过给予具有特定权限的匿名用户“验证(django)用户是真实的”标准假设而脱颖而出。 您的第一个案例的问题是具有“允许任何”的权限装饰器。 我建议有一个虚拟的Django用户。 (它也不会阻止你扩展到任何数量的实例)。 使用 user = User.objects.get_or_create(username='whatever')[0] 代替 user = AnonymousUser() 现 ...
-
如果您的模板无效,我建议您在views.py中使用它,例如: from django.shortcuts import render, render_to_response def homepage(request): template_name = 'homepage.html' extended_template = 'base_login.html' if request.user.is_authenticated(): extended_template ...